9

我正在分发一个共享库 (C++) 和一个使用该库的 python 模块。我构建了子弹物理库的修改版本(作为 CMake 子项目)。我只在一个文件中使用 Bullet 类和函数,bullet_interface.cpp所有 Bullet 的东西都隐藏在namespace { ... }.

问题是其他一些库需要 Bullet 作为系统依赖项并链接到 Bullet 的系统版本。事实上,我的库 ( libopenrave) 的依赖项之一是导出 Bullet 符号。(更具体地说,它有时会动态加载导出子弹符号的插件)。

我想知道是否有办法构建我的库以便bullet_interface.cpp使用正确的 Bullet 函数,但是我的库不会使任何 Bullet 符号可见。我不能使用系统项目符号,因为我必须对源代码进行更改。一个 hacky 解决方案是使用搜索和替换重命名所有 Bullet 函数和类(几乎都包含字符串“bt”)。有没有更好的办法?

4

1 回答 1

5

这是完成您想要的事情的一种迂回方式,但它优于项目符号代码中的搜索和替换。

objcopy您可以使用以下实用程序尝试在项目符号库中添加“前缀”符号:

objcopy --prefix-symbols=old_ bullet.a

也应该适用于动态库,但您必须尝试一下。有关详细信息,请参阅此答案

于 2013-02-26T20:12:50.370 回答