假设我有一个C ++库代码,其中一些定义包含extern "C" { ... }
。
我还有一个使用该C ++库的C库代码。
我想要做的是创建一个.so文件,这样只有一次dlopen
的调用才足以开始使用这个库。
这就是我现在所做的:我首先将我的C ++库编译为带有-shared -rdynamic -fPIC
的.so文件。然后我将我的C库编译为具有相同参数的.so文件。之后,我必须在加载C库之前加载带有dload
的C ++库。否则,加载失败并显示undefined symbol
错误。
我想要做的是将这两个库编译成一个.so文件,这样只有一次dload
的调用才足以使用它。
我该怎么做?
提前致谢。
编辑:编译成.o文件然后合并对我不起作用。这是我的所作所为:clang [list of object files] -shared -rdynamic -fPIC -o libmylib.so
undefined symbol: __gxx_personality_v0
错误。 EDIT2:啊,我原谅将它与libstdc++
联系起来,它现在有效。感谢。
答案 0 :(得分:1)
.so
文件,方法是组合所有目标文件,或者构建两个静态.a
库,然后将它们链接到一个共享库中。.so
文件,请将第一个库链接到第二个库,就像使用可执行文件一样。例如。如果libfoo
取决于libbar
,请使用libfoo
汇编-lbar
。您必须在默认库路径或LD_LIBRARY_PATH
环境变量中使用依赖库。