我下载了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

错误是以下之一:



该代码几乎包含唯一的ASSERT_FALSE(false)语句(这是一个最小的完整示例,并且仍然无法编译),所以我想说问题不在于代码本身。
以下语句也会引起相同的问题:
TEST(FOO, BAR) { ASSERT_TRUE(true); }

是由于googletest, clang 还是其他原因引起的问题?
我正在尝试弄清楚,但是在查看googletest代码时遇到了一些麻烦。

注意

我既找不到googletest的公开问题,也找不到封闭的问题,所以我还要在github上为其打开一个票据。
稍后我可能会发布该问题的链接。

最佳答案

从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++)

修复此问题之前,您需要链接googletest-ing项目
使用使用相同编译器构建的googletest库。

10-08 20:00