共享库名称冲突

Joh*_*ohn 7 c++ visibility shared-libraries name-clash

我正在分发一个共享库(c ++)和一个使用这个库的python模块.我构建了Bullet Physics Library的修改版本(作为CMake子项目).我只在一个文件中使用Bullet类和函数 - bullet_interface.cpp - 并且所有Bullet内容都隐藏在"namespace {...}"中.

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

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

Geo*_*sov 5

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

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

objcopy --prefix-symbols=old_ bullet.a
Run Code Online (Sandbox Code Playgroud)

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