90.centos7上一次std-string编译错误定位
llvm库文件是从debian系统上拷过来的,tvm源码也是从debian上拷的,debian上tvm编译可正常通过, 本机centos7使用gcc8.3编译报错
在本机centos7上编译tvm时,指定了llvm的路径,编译提示连接错误,找不到对应的函数实现。
通过查看llvm的lib文件夹中so的符号,发现tvm需要的函数与llvm里so的函数差别在于: std::basic_string与std::__cxx11::basic_string无法匹配
网上搜到相关信息: https://www.it610.com/article/1292044869954510848.htm
在tvm的CMakelists.txt里添加了宏定义_GLIBCXX_USE_CXX11_ABI=1, 仍然没用,搜索gcc8.3中std string相关的定义
发现在c++config.h中将_GLIBCXX_USE_CXX11_ABI=0
写死了。将其修改为=1,重新编译tvm通过了。
查看debian上写的就是=1, 因此debian上能编译通过,centos7上编不过。
网上搜centos的相关问题,得到答案是centos6/7没法实现,因此被强制禁用: https://bugzilla.redhat.com/show_bug.cgi?id=1546704
上述方法强行改了之后编译出来的tvm可以正常使用,不确定有没有隐患。 正确的解决方法应该是用llvm源码在centos7上重新编译出llvm库,这样应该就匹配了。
centos7上使用gcc11可能也可以解决这个问题。
# centos7上相关的编译问题
编辑 (opens new window)
上次更新: 2022/11/29, 09:59:36