GoogleTest:CLang 编译错误 ASSERT_FALSE(false)

GoogleTest: CLang error compiling ASSERT_FALSE(false)

我下载了 googletest 并将其构建在名为 build 的子目录中。
然后,我在名为 main.cpp:

的文件中编写了以下代码
#include <gtest/gtest.h>
TEST(FOO, BAR) { ASSERT_FALSE(false); }

确实很简单。
它依赖于这样一个事实,即 googletest 已经提供了 main 函数,如果您 link libgtestmain.a 库。

GCC (v5.3.1) 使用以下命令编译它:

g++ -L./googletest/build/googlemock/gtest -L./googletest/build/googlemock -I./googletest/googletest/include/ -lgmock -lgtest -lgtest_main -lgmock_main -pthread -std=c++11 main.cpp

无论如何,clang (v3.6.2) 不会使用相同的命令进行编译:

clang++ -L./googletest/build/googlemock/gtest -L./googletest/build/googlemock -I./googletest/googletest/include/ -lgmock -lgtest -lgtest_main -lgmock_main -pthread -std=c++11 main.cpp

错误如下:

/tmp/main-4127ae.o: In function 'FOO_BAR_Test::TestBody()':
main.cpp:(.text+0x7b): undefined reference to `testing::internal::GetBoolAssertionFailureMessage(testing::AssertionResult const&, char const*, char const*, char const*)'
clang: error: linker command failed with exit code 1 (use -v to see invocation)

该代码几乎包含唯一的 ASSERT_FALSE(false) 语句(这是一个最小的完整示例,但仍然无法编译),所以我认为问题不在代码本身。
同样的问题也出现在下面的语句中:

TEST(FOO, BAR) { ASSERT_TRUE(true); }

这是由于 googletestclang 或其他原因引起的问题吗?
我正在尝试弄清楚,但在查看 googletest.

的代码时遇到了一些麻烦

注意

我找不到 googletest 的未解决问题或已解决问题,所以我也在 上为它开了一个工单github.
过一会儿我可能会 post link 解决这个问题。

从 GCC 5.1 开始,g++ 与 clang++ 不兼容。一些 错误报告:clang++ no longer ABI-compatible with g++Add support for gcc's attribute abi_tag (needed for compatibility with gcc 5's libstdc++).

在解决此问题之前,您需要 link googletest-ing 项目 使用使用相同编译器构建的 googletest 库。