我有:
其中:
dlopen
在运行时加载D. D在A中运行时是否可以使用S中定义的符号,而D在其编译时没有与S链接?即可以在全局命名空间中访问符号吗?
其他说明: 我需要D和A才能从S调用函数。 理想情况下,我不想改变S。
我已经尝试了这个,我得到了(当在D中使用S的符号时):
dyld: lazy symbol binding failed: Symbol not found: __Z14myFunctioni
我认为这可能是:
extern "C"
测试并排除了这一点。)也许我需要使用不同的设置进行编译,或者我必须始终将所有S链接到D?如果S成为一个动态图书馆,情况也会改变吗?
三江源
答案 0 :(得分:2)
使用该库的依赖关系列表中的库以及之前使用RTLD_GLOBAL标志打开的任何其他库来解析库中的外部引用。 如果可执行文件与标记“-rdynamic”(或同义地,“ - export-dynamic”)链接,则可执行文件中的全局符号也将用于动态解析引用装载的图书馆。