【发布时间】:2016-07-15 14:00:34
【问题描述】:
我有一个第三方共享对象文件(库文件)a.so,但是当我这样做时
ldd -d -r a 它提供了许多未定义的符号,例如 undefined symbol: _ZTVN10__cxxabiv117__class_type_infoE。我检查并用谷歌搜索发现这个符号来自标准libstdc++。所以为了让a.so 工作,我做了以下工作:
g++ -fPIC -static-libgcc -L. -shared -o liba.so -Wl,-soname,liba.so -L. a.so
现在当我做ldd -d -r liba 时,我得到了所有的引用。
但这里的问题是我想与我的应用程序共享 liba.so,该应用程序将在不同的 linux 机器上运行,liba.so 找不到 a.so。
有没有一种方法可以通过将标准库和提供的第三方共享库添加到单个共享对象中来删除未定义的符号并且我可以使用?
【问题讨论】:
-
使用 'nm' 实用程序找出这个符号的来源:
libgcc_s.so不是答案,因为它不包含与 C++ 相关的符号。 (我猜是 libstdc++.so) -
谢谢!!是的,你的猜测是正确的,它是 libstdc++.so
-
您实际测试过这个
a.so并遇到问题吗?您收到了哪些错误消息? (主程序是用 C++ 编写的吗?C++ 插件只能从 C++ 主程序中使用)
标签: c++ linker shared-libraries