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); }
这是由于 googletest、clang 或其他原因引起的问题吗?
我正在尝试弄清楚,但在查看 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 库。
我下载了 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); }
这是由于 googletest、clang 或其他原因引起的问题吗?
我正在尝试弄清楚,但在查看 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 库。