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