我有一个 linux 共享库 foo.so,它是使用dlopen("foo.so", RTLD_NOW | RTLD_LOCAL)
. 从 foo.so 我想 dlopen 另一个库 bar.so,它引用了 foo.so 中定义的符号,但链接器找不到它们。我无法将 RTLD_LOCAL 更改为 RTLD_GLOBAL,因为我没有执行加载的可执行文件的源代码。我认为-Wl,--export-dynamic
在链接 foo.so 时可能会有所帮助,但它不会将本地标志覆盖为 dlopen。GCC 的新属性可见性功能看起来也没有提供答案。
有没有一种方法可以指示链接器将对 bar.so 中未定义符号的引用解析为 foo.so 中的那些定义,而无需使用 -lfoo 链接 bar 或相似性将符号移动到第三个库中并将 foo 和 bar 链接到它? 我唯一想到的是从 foo.so 本身使用 RTLD_GLOBAL dlopen foo.so,然后 dlopen bar.so,但这让我觉得有点乱。谢谢。