我一直在寻找一种方法使一个共享库(我们将库命名为 libbar.so
)在Linux上被延迟加载,并希望只有链接器的帮助就可以实现,而不需要修改用C++编写的源代码; 我的意思是,我不想在父库(命名为libfoo.so
)的源代码中调用dlopen()
或dlsym()
以调用libbar.so
的函数,因为它们会使源代码混乱且维护过程困难。 (简而言之,我希望在Linux上采用类似于Visual Studio的/DELAYLOAD
选项的方式)
无论如何,到目前为止,我在互联网上找到了一些与我的问题相关的不确定信息,因此很高兴能从以下问题的答案中获得清晰的信息。
- GNU ld是否支持Linux上的任何延迟加载机制?
- 如果不支持,那么Clang呢?
dlopen()
系列是在Linux上使共享库延迟加载的唯一方法吗?
我尝试使用路径将-zlazy
标志传递给GCC(g ++),它似乎接受了该标志,但行为看起来并没有使libbar.so
延迟加载(不具备libbar.so
,我期望在第一次调用libbar.so
时有一个异常,但实际上在进入libfoo.so
之前就引发了异常)。另一方面,Clang(clang ++
)留下了一个警告,说它忽略了选项标志。
此致,
-z lazy
是用于符号的惰性绑定,而不是库的惰性加载。 - msc