【发布时间】:2010-05-13 13:36:01
【问题描述】:
我正在开发一个普通的 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/ 以查看我们拥有哪些库,然后选择合适的库?或者有人有更好的主意吗?
谢谢大家,
安迪
【问题讨论】: