【发布时间】:2013-02-05 09:41:36
【问题描述】:
我在这里搜索了这个问题并找到了一些类似的问题,但这些解决方案对我不起作用。这是我的问题:
我的应用程序正在使用 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 依赖项。
【问题讨论】:
-
以后如果你改变图书馆,你可以只改变链接指向新的,那不是解决问题吗?
-
只是一个猜测 - 所以不可能链接到一些通用库。它总是需要与特定版本的库链接。如果您更改系统,则需要重新构建您的应用程序。另一种可能性是不链接共享库,而是制作“静态”应用
-
@mux 我在 gcc 中使用“-l”选项,因此它将我的应用程序链接到新库,如 libldap-2.4.so.0 但它会在我所在的系统中要求相同的名称运行我的应用程序。我想要那个修复。
-
@xhudik 添加静态库可以从 openldap 包库中删除依赖项,但它会使我的应用程序更大:-(。我买不起。但感谢您的建议。:-)跨度>
标签: linux gcc linker shared-libraries