单元测试如何编译 undefined symbol: testing::internal::EqFailure(cha

环境:

rock8.4 
root@node1 unittest]# gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/8/lto-wrapper
OFFLOAD_TARGET_NAMES=nvptx-none
OFFLOAD_TARGET_DEFAULT=1
Target: x86_64-redhat-linux
Thread model: posix
gcc version 8.5.0 20210514 (Red Hat 8.5.0-10) (GCC)

问题:

[Bug]: failed to compile unittest on centos8

https://github.com/oceanbase/oceanbase/issues/903

方法:

把7解压出来的libgtest.a和libgtest_main.a放到8里面的oceanbase就可以编译过去了
7 和8 是哪里
尝试修改cmake和直接放到相关目录 都不行呢

clang-11: error: linker command 错误 ,我自己写一个demo 没有问题

[root@node1 unittest]# nm /oceanbase/oceanbase/deps/3rd/usr/local/oceanbase/deps/devel/lib/libgtest.a | c++filt |grep  GetBoolAssertionFailureMessage
00000000000019f0 T testing::internal::GetBoolAssertionFailureMessage[abi:cxx11](testing::AssertionResult const&, char const*, char const*, char const*)
0000000000000126 t testing::internal::GetBoolAssertionFailureMessage[abi:cxx11](testing::AssertionResult const&, char const*, char const*, char const*) [clone .cold.659]
ld.lld: error: undefined symbol: testing::internal::EqFailure(char const*, char const*, std::string const&, std::string const&, bool)
>>> referenced by gtest.h:1378 (./deps/3rd/usr/local/oceanbase/deps/devel/include/gtest/gtest.h:1378)
>>>               CMakeFiles/test_route_policy.dir/test_route_policy.cpp.o:(testing::AssertionResult testing::internal::CmpHelperEQFailure<int, int>(char const*, char const*, int const&, int const&))
>>> referenced by gtest.h:1378 (./deps/3rd/usr/local/oceanbase/deps/devel/include/gtest/gtest.h:1378)
>>>               CMakeFiles/test_route_policy.dir/test_route_policy.cpp.o:(testing::AssertionResult testing::internal::CmpHelperEQFailure<long, long>(char const*, char const*, long const&, long const&))
>>> referenced by gtest.h:1378 (./deps/3rd/usr/local/oceanbase/deps/devel/include/gtest/gtest.h:1378)
>>>               CMakeFiles/test_route_policy.dir/test_route_policy.cpp.o:(testing::AssertionResult testing::internal::CmpHelperEQFailure<bool, bool>(char const*, char const*, bool const&, bool const&))
>>> referenced 2 more times

ld.lld: error: undefined symbol: testing::internal::GetBoolAssertionFailureMessage(testing::AssertionResult const&, char const*, char const*, char const*)
>>> referenced by test_sql_utils.cpp:188 (./unittest/sql/test_sql_utils.cpp:188)
>>>               ../CMakeFiles/sql_ut_base.dir/test_sql_utils.cpp.o:(test::TestSqlUtils::init())
>>> referenced by test_sql_utils.cpp:194 (./unittest/sql/test_sql_utils.cpp:194)
>>>               ../CMakeFiles/sql_ut_base.dir/test_sql_utils.cpp.o:(test::TestSqlUtils::init())
>>> referenced by test_sql_utils.cpp:197 (./unittest/sql/test_sql_utils.cpp:197)
>>>               ../CMakeFiles/sql_ut_base.dir/test_sql_utils.cpp.o:(test::TestSqlUtils::init())
>>> referenced 23 more times
clang-11: error: linker command failed with exit code 1 (use -v to see invocation)
make[2]: *** [unittest/sql/optimizer/CMakeFiles/test_route_policy.dir/build.make:106: unittest/sql/optimizer/test_r

对比了一下 centos7 编译单元测试没有问题。