假设我有一个 C++ 库代码,其中一些定义用extern "C" { ... }
.
我还有一个使用该 C++ 库的 C 库代码。
我想做的是创建一个 .so 文件,这样只需一次调用就dlopen
足以开始使用这个库。
这就是我现在要做的:我首先将我的 C++ 库编译为一个 .so 文件,其中包含 .so 文件-shared -rdynamic -fPIC
。然后我将我的 C 库编译为具有相同参数的 .so 文件。之后,我必须在加载 C 库dload
之前加载 C++ 库。否则加载失败并出现undefined symbol
错误。
我想要做的是将这两个库编译成一个 .so 文件,这样只需一次调用就dload
足以使用它。
我怎样才能做到这一点?
提前致谢。
编辑:编译为 .o 文件然后合并对我不起作用。这就是我所做的:
- 我使用 -fPIC 参数将每个文件编译为目标文件
- 我将它们与
clang [list of object files] -shared -rdynamic -fPIC -o libmylib.so
- 当我尝试加载时,
undefined symbol: __gxx_personality_v0
出现错误。
EDIT2:啊,我忘了将它链接到libstdc++
,它现在可以工作了。谢谢。