GoogleTest:CLang错误编译ASSERT_FALSE(false)

时间:2016-05-19 10:52:11

标签: c++ gcc clang googletest

我下载了googletest并将其构建在名为build的子目录中 然后,我在名为main.cpp的文件中编写了以下代码:

#include <gtest/gtest.h>
TEST(FOO, BAR) { ASSERT_FALSE(false); }

确实很简单。
如果您链接main库,它依赖于 googletest 已提供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:在功能&#39; FOO_BAR_Test :: TestBody()&#39;:
  main.cpp :(。text + 0x7b):未定义引用`testing :: internal :: GetBoolAssertionFailureMessage(testing :: AssertionResult const&amp;,char const *,char const *,char const *)&#39;
  clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)

代码几乎包含唯一的ASSERT_FALSE(false)语句(这是一个最小的完整示例,但它仍然没有编译),所以我说问题不在于代码本身。
同样的问题也来自以下陈述:

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

由于 googletest clang 或其他原因,这是一个问题吗?
我试图解决这个问题,但在查看 googletest 的代码时,我有点麻烦。

注意

我无法找到 googletest 的开放或已关闭的问题,所以我也要在 github上打开它的票据
我可能会在一段时间内发布该问题的链接。

1 个答案:

答案 0 :(得分:2)

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

直到修复此问题,您需要链接googletesting项目 使用相同编译器构建的googletest库。