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



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

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

是否有RTLD_DEEPBIND在这些非Linux平台中使用的替代方案?

感谢您的回复

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

一些想法:

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

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

  3. 是否可以确保GenericV1.so从未加载?你需要这个图书馆的东西吗?

最新更新