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

Sha*_*ala 7 c++ posix cross-platform loading shared-libraries

我有一个第三方库(比如TP.so)使用不正确的库版本(比如GenericV1.so)而不是使用它应该使用的那个(比如GenericV2.so)的问题.附加的库包含在我的程序中.

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

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

谢谢你的回复

Rad*_*adu 1

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

一些想法:

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

  2. 您可以创建一个函数,以正确的顺序打开库:GenericV2.so,然后是 TP.so。

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