我正在开发一个普通的 X11 应用程序。
默认情况下,我的应用只需要 libX11.so 和标准的 gcc C 和数学库。该应用程序可以通过 Xfixes、Xrender 和 ALSA 声音系统扩展功能。但是,这些(Xfixes、Xrender 和 ALSA)功能是可选的。
为了实现这种行为,我使用运行时加载,即,libXfixes、libXrender 和 libasound 应该是 dlopen()ed。
因此,该应用程序可以在没有此类库的情况下运行。
现在我的问题:
What library names should I use when calling dlopen()?
我观察到这些因发行版而异。
例如,在 openSUSE 11 上,它们被命名为:
- libXfixes.so
- libXrender.so
- libasound.so
然而,在 Ubuntu 上,这些名称附有版本号,如下所示:
- libXfixes.so.3
- libXrender.so.1
- libasound.so.2
因此,在 Ubuntu 上尝试打开“libXfixes.so”会失败,尽管 lib 显然在那里。它只是附加了一个版本号。那么我的应用程序应该如何处理呢?
我是否应该让我的应用程序首先手动扫描 /usr/lib/ 以查看我们拥有哪些库,然后选择合适的库?或者有人有更好的主意吗?
多谢你们,
安迪