解决用gcc7.3链接gtest1.7的问题
Posted ithiker
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了解决用gcc7.3链接gtest1.7的问题相关的知识,希望对你有一定的参考价值。
最近要在新系统中使用gcc7.3, 配套使用的gtest是1.7版本的,对于下面的程序:
#include <gtest/gtest.h>
TEST(testSuite, ShouldSucceed)
EXPECT_EQ(1, 1);
int main(int argc, char **argv)
::testing::InitGoogleTest(&argc, argv);
采用下面的命令
~/gcc/7.3.0_1/bin/g++ -std=c++11 -o g gtest_main_unittest.cc -I/gtest/1.7.0_1/include/ -L/gtest/1.7.0_1/lib/ -lgtest -lpthread
结果却发现怎么编译都不通过,一直报下面的错误:
/tmp/ccZdMeII.o: In function `testing::AssertionResult testing::internal::CmpHelperEQ<int, int>(char const*, char const*, int const&, int const&)':
gtest_main_unittest.cc:(.text._ZN7testing8internal11CmpHelperEQIiiEENS_15AssertionResultEPKcS4_RKT_RKT0_[_ZN7testing8internal11CmpHelperEQIiiEENS_15AssertionResultEPKcS4_RKT_RKT0_]+0x8d): undefined reference to `testing::internal::EqFailure(char const*, char const*, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, bool)'
collect2: error: ld returned 1 exit status
最后请教了同事,才找到原因,原来我们编译gtest使用用的gcc版本是4.8.4,现在如果要在gcc7.3中使用的话,必须要保持ABI兼容,上面的命令最后加上 -D_GLIBCXX_USE_CXX11_ABI=0:
~/gcc/7.3.0_1/bin/g++ -std=c++11 -o g gtest_main_unittest.cc -I/gtest/1.7.0_1/include/ -L/gtest/1.7.0_1/lib/ -lgtest -lpthread -D_GLIBCXX_USE_CXX11_ABI=0
对于CMake文件,加上下面一句也可以了
add_compile_definitions(_GLIBCXX_USE_CXX11_ABI=0)
以上是关于解决用gcc7.3链接gtest1.7的问题的主要内容,如果未能解决你的问题,请参考以下文章
Linux驱动开发笔记:ubuntu系统从源码编译安装gcc7.3.0编译器