在某项目中编译了一个库,然后再另一台服务器上引用该库的时候提示函数没定义,而在我的服务器上就不会报错,

 但是当我把这个库去掉之后,编译报如下的错误,跟上面不一样了

 对比发现,加库之后构造函数是定义了的,那么都在是同一个库里面不会说某个函数定义了,某个函数没定义,然后我发现构造函数是不带参数的,其余的带参数的几个函数都是提示没定义,于是突然想到这应该是gcc版本问题,可以看到最上面没定义的报错里面有

error: undefined symbol: std::__cxx11::basic_string

这个__cxx11是gcc5.0以上才有的,所以问题的原因就在于我在自己服务器上编译库的时候gcc是4.9,到了另一台服务器上gcc是7.5,而gcc7.5对于标准库中的变量解析方式跟gcc4.9是不一样的,这就导致找不到定义,解决方法是在makefile中增加

-D_GLIBCXX_USE_CXX11_ABI=0

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐