0

假设我有一个 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++,它现在可以工作了。谢谢。

4

1 回答 1

1
  1. 最简单的方法是将它们组合成一个.so文件,方法是组合所有目标文件,或者构建两个静态.a库,然后将它们链接到一个共享库中。
  2. 如果您真的想保留两个.so文件,请将第一个库链接到第二个库,就像使用可执行文件一样。例如,如果libfoo依赖于,则使用libbar编译。您必须在默认库路径或环境变量中包含依赖库。libfoo-lbarLD_LIBRARY_PATH
于 2013-06-04T07:37:45.210 回答