对于不支持RTLD_DEEPBIND的平台,dlopen()函数中是否有RTLD_DEEPBIND标志的替代?

时间:2013-02-22 10:22:39

标签: c++ shared-libraries cross-platform posix loading

我遇到了第三方库(比如TP.so)使用不正确的库版本(例如,GenericV1.so)而不是使用它应该使用的那个(例如,GenericV2.so)的问题。包含额外的库以供我的程序使用。

对此的直接解决方案(在SO上有详细记录)是使用带有RTLD_DEEPBIND标志的dlopen()。但该标志仅在Linux上有效,而不是在HP-UX,Solaris,AIX等其他平台上有效。

RTLD_DEEPBIND是否有替代方案可用于这些非Linux平台?

感谢您的回复

1 个答案:

答案 0 :(得分:0)

在我看来,你根本不需要RTLD_DEEPBIND。您只需确保以正确的顺序加载具有竞争符号的库。

一些想法:

  1. 您可以使用LD_PRELOAD确保在任何其他库之前加载正确的库(GenericV2.so)。

  2. 您可以创建一个按正确顺序对库进行调度的函数:GenericV2.so然后是TP.so。

  3. 是否可以确保GenericV1.so永远不会被加载?你需要这个图书馆的任何东西吗?