如何 link 针对 link 在 linux 中使用不同版本的 boost 编辑的共享库

How to link against a shared library which linked with different version of boost in linux

我正在一个大项目中构建一个可执行文件,它的一个依赖项,一个 .so 文件,是针对 boost 1.6.2 link编辑的,并且可执行文件本身必须是静态的linked 到不同版本的 boost,我不知道那个版本,也许是 1.6.0,当我 link 直接到 .so 时,它能够编译和 link,但是当我运行那个二进制文件,当调用外部.so文件类的函数时,那个二进制文件的行为变得奇怪,比如它可以运行进入无限锁,和核心转储内部提升。但是,如果我不 link 不同版本的 boost,它就可以工作。我猜是boost的版本导致了这个问题。真的吗?我该如何解决这个问题?

最安全的做法是重命名静态链接版本的 boost 的命名空间,以确保没有符号冲突。不幸的是,我认为 boost 没有任何用于更改其命名空间的宏,因此您必须在源代码中进行手动查找和替换。