【发布时间】:2011-03-22 11:53:28
【问题描述】:
我有一个 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 和反对吧?我唯一想到的是从 foo.so 本身使用 RTLD_GLOBAL dlopen foo.so,然后 dlopen bar.so,但这让我觉得有点混乱。谢谢。
【问题讨论】:
标签: linux shared-libraries dlopen