共享库名称冲突
Shared library name collisions
我正在分发一个共享库(C++)和一个使用该库的python模块。我构建了子弹物理库的修改版本(作为CMake子项目)。我只在一个文件bullet_interface.cpp
中使用Bullet类和函数,所有的Bullet内容都隐藏在namespace { ... }
中。
问题是,其他一些库需要将Bullet作为系统依赖项并链接到系统版本的Bullet。事实上,我的库的一个依赖项(libopenrave
)导出了Bullet符号。(更具体地说,它有时会动态加载导出Bullet符号的插件)。
我想知道是否有一种方法可以构建我的库,使bullet_interface.cpp
使用正确的Bullet函数,但我的库不会使任何Bullet符号可见。我不能使用系统项目符号,因为我必须更改源代码。一个棘手的解决方案是使用搜索和替换来重命名所有Bullet函数和类(几乎所有函数和类都包含字符串"bt")。有更好的方法吗?
这是一种实现您想要的功能的迂回方法,但它胜过了项目符号代码中的搜索和替换。
您可以使用objcopy
实用程序在项目符号库中尝试"前缀"符号,如下所示:
objcopy --prefix-symbols=old_ bullet.a
这个也应该与动态库一起使用,但你必须尝试一下。有关详细信息,请参阅此答案。
相关文章:
- 将成员变量添加到共享库中的类中,不会破坏二进制兼容性吗
- 是否可以通过C++扩展强制多个python进程共享同一内存
- 写入位置0x0000000C时发生访问冲突
- 在cuda线程之间共享大量常量数据
- 如何从具有移动语义的类对象中生成共享指针
- 在c代码之间共享数据的最佳方式
- 在两个类中共享相同的函数调用,并在不需要时避免空实例化
- GL_SHADERSTORAGE_BUFFER位置是否与其他着色器位置冲突
- 使用cmake从源代码构建MySQL连接器/C++失败(与以前的声明冲突)
- 将静态库链接到不带-fPIC的共享库中
- 引发异常:读取访问冲突**dynamicArray**为0x1118235.发生
- C++LinkedList问题.数据类型之间存在冲突?没有匹配的构造函数
- 为什么std::互斥需要很长的、非常不规则的时间来共享
- 链表中写入访问冲突的未知原因
- 使用Boost Interprocess创建托管共享内存需要很长时间
- 尝试通过共享指针使用变量时读取访问冲突
- 使用 C++ 标准库避免共享库中的符号冲突
- 访问共享内存时出现读取访问冲突
- 加载具有相同符号的两个共享库时是否存在符号冲突
- 共享库名称冲突