关于Freeswtich的mod模块编译的一个问题

最近有一个freeswitch的mod模块需要从centos移植到debian去,原来以为会非常容易,结果却是一波三折,折腾了很久,好在结果是解决了,今天就是做下记录。

其实当这个mod移植到debian去后,编译并没有问题,只是在执行的时候出现了如下的提示:关于Freeswtich的mod模块编译的一个问题_第1张图片

很显然是函数找不到,但明明动态库里面有这个函数呢,通过一顿研究,发现了确切的原因:引用网上的说明如下:

“Abi 链接最常见的错误是 std::string 和 std::list 的在gcc 4.x 和 gcc 5.x 的不同实现引起的。在gcc 4.x 时,gcc 对标准 string 的实现就放在 std 命名空间下,编译时展开为 std::basic_string 。但是 gcc 5.x 开始,对 string 的实现就放在了 std::__cxx11空间里,编译后展开为 std::__cxx11::basic_string 。这就会导致在 gcc 4.x 编译的动态库,假如有的函数使用了 string 作为参数或者返回值,这时导出的函数参数为 std::basic_string 类型。 无法在 gcc 5.x 下编译连接使用。
错误类似:

undefined symbol:  "std::__cxx11 ***"

这种情况有一个折中办法就是在gcc 5.x 或以上 编译时,增加 -D_GLIBCXX_USE_CXX11_ABI=0 禁用 c++11 abi。”

原来centos下的编译器是gcc4.8.5,而在debian11下早已升级到了gcc10,故此产生了问题。做个留念记录吧。
 

你可能感兴趣的:(开发语言,c++)