如何链接共享库的特定名称(版本)

lin*_*ore 6 linux linker gcc shared-libraries

我在这里搜索了这个问题并找到了一些类似的问题,但有些解决方案对我不起作用。这是我的问题:我的应用程序正在使用 openldap-2.3 的共享库进行编译。Openldap 有 /usr/lib/libldap-2.3.so.0 链接到 /usr/lib/libldap-2.3.so.0.2.31。我将-lldap选项传递给 gcc,它将 libldap-2.3.so.0 文件链接到我的应用程序。

但我想链接到特定名称,例如 libldap.so。请纠正我,将来如果我在开发系统中将openldap版本更改为2.4,它将链接到libldap-2.4.so.XXX版本。

那么我怎样才能将我的应用程序链接到特定名称,以便它始终查找像 libldap.so 这样的相同名称。

注意:我创建了 /usr/lib/libldap-2.3.so.0 的软链接作为 /usr/lib/libldap.so ,然后将库名称传递/usr/lib/libldap.so给编译器,-l然后应用程序编译成功,没有任何链接错误,但仍然显示相同的 libldap -2.3.so.0 依赖。

von*_*and 2

Unix 中的共享库机制(链接很旧,但仍然相关)通过在构建时将可执行文件链接到 liba.so 来工作,liba.so 是 liba.so.1 的符号链接,而 liba.so.1 又是 liba 的链接.so.1.2。然后,可执行文件会记录 liba.so.1 以在启动时加载。如果您更新 liba.so,它可能是 liba.so.1.5(没有 ABI 更改,第一位数字不变),链接看起来像 liba.so --> liba.so.1 --> liba.so .1.5,您的可执行文件现在透明地使用 1.5。如果版本变为 liba.so.2.0(API 更改!),系统会生成 liba.so --> liba.so.2 --> liba.so.2.0。您的旧可执行文件仍然使用 1.5,任何新构建的程序现在都将引用 2。显然,只要 1.x 存在,所有这些都有效。据推测,您的发行版提供了可以并行安装的库包,或者一些compat-liba-1为了旧可执行文件的利益而安装的包。