Googletest代码CLANG编译正常但GCC编译失败原因咨询
编译失败根本原因
- 标准库ABI不匹配:你本地的
libgtest.a是Apple Clang编译生成的,macOS平台下Clang默认使用*libc++作为C++标准库,报错中St3__1前缀就是libc++独有命名空间的标识。而GCC默认使用libstdc++作为C++标准库,你的测试代码用GCC编译时,生成的符号依赖libstdc++的__cxx11版字符串实现(对应报错中NSt7__cxx1112basic_string前缀),和gtest静态库绑定的libc++*符号完全不兼容,因此抛出大量未定义符号错误。 - 头文件/库路径默认搜索规则差异:macOS平台下通过包管理器安装的GCC,默认不会检索
/usr/local/include和/usr/local/lib路径,因此最开始未加-I、-L参数时会直接找不到gtest头文件。
可行解决方案
- 方案1:重新编译GCC版本的gtest库,拉取GoogleTest源码后使用GCC作为编译器重新编译安装,替换当前Clang编译的libgtest.a,即可正常用原命令编译测试代码。
- 方案2:指定GCC使用*libc++*编译,调整编译命令为:
g++ -std=c++17 gt.cpp -o gt -I/usr/local/include/ -L/usr/local/lib/ -lgtest -stdlib=libc++
注意该方案需要你的GCC版本支持-stdlib=libc++参数。 - 方案3:直接使用Clang编译测试代码,和现有gtest库适配性最好,也就是你之前已经验证可正常运行的编译命令。
内容的提问来源于stack exchange,提问作者Remi.b
相关产品推荐
相关产品推荐

