我下载了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上打开它的票据。
我可能会在一段时间内发布该问题的链接。
答案 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库。