我有偶尔具有导出相同的符号名称两个第三方库。当可执行被加载时, LD 通常采错误之一,我得到碰撞作为结果。我不能做太多关于这些库的内容,因此可能是有一种方法来指导的 LD 的如何找到合适的imlementation?

OS - Solaris 10中,我的节目由autoconf的/自动工具/ gcc构建,冲突的库 libclntsh (Oracle驱动程序的一部分)和OpenLDAP。 Unfortuinately,我不能使用Oracle实现LDAP客户端的 - 它缺乏许多功能OpenLDAP的有

编辑:连杆是如下:libclntsh.so-> A.so-> MAIN <-B.so <-libldap_r.so

有帮助吗?

解决方案

如果你并不需要在编译的时候都共享库链接(这是不是从你的问题清楚),你可以使用-Bdirect共享库。这将记录从那里他们被发现的共享库中的所有符号;如果然后在运行时出现的符号的第二定义(从其他共享库),它会被忽略。

其他提示

的一个解决方案是将LD_PRELOAD环境变量设置为符号应优先的库。 (如果该库已共用其自己的库依赖,则可能需要预加载其所有相关的;只需设置LD_PRELOAD到依赖库,用空格隔开的列表)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top