gtest installed with conan: undefined reference to `testing::internal::GetBoolAssertionFailureMessage`

匿名 (未验证) 提交于 2019-12-03 02:29:01

问题:

I use cmake to build my project and conan to install Google Test as dependency:

conanfile.txt

[requires] gtest/1.7.0@lasote/stable  [generators] cmake  [imports] bin, *.dll -> ./build/bin lib, *.dylib* -> ./build/bin 

CMakeLists.txt

PROJECT(MyTestingExample) CMAKE_MINIMUM_REQUIRED(VERSION 2.8)  INCLUDE(conanbuildinfo.cmake) CONAN_BASIC_SETUP()  ADD_EXECUTABLE(my_test test/my_test.cpp) TARGET_LINK_LIBRARIES(my_test ${CONAN_LIBS}) 

test/my_test.cpp

#include <gtest/gtest.h> #include <string>  TEST(MyTest, foobar) {     std::string foo("foobar");     std::string bar("foobar");     ASSERT_STREQ(foo.c_str(), bar.c_str()); // working     EXPECT_FALSE(false); // error } 

Build

$ conan install --build=missing $ mkdir build && cd build $ cmake .. && cmake --build . 

I can use ASSERT_STREQ, but if I use EXPECT_FALSE I get an unexpected error:

my_test.cpp:(.text+0x1e1): undefined reference to `testing::internal::GetBoolAssertionFailureMessage[abi:cxx11](testing::AssertionResult const&, char const*, char const*, char const*)' collect2: error: ld returned 1 exit status 

What's wrong with my configuration?

回答1:

The issue is that you are installing conan dependencies using the default settings (which is build type Release):

$ conan install --build=missing # equivalent to $ conan install -s build_type=Release ... --build=missing 

The default settings can be seen in your conan.conf file

Then, you are using cmake in a nix system with the default build type which is Debug, which is a single-conf environment (opposed to multi-configuration Debug/Release environments, as Visual Studio), so when you are doing:

$ cmake .. && cmake --build . # equivalent to $ cmake .. -DCMAKE_BUILD_TYPE=Debug && cmake --build . 

The incompatibility of Debug/Release build leads to that unresolved issue. So the solution would be to use the same build type that matches your installed dependencies:

$ cmake .. -DCMAKE_BUILD_TYPE=Release && cmake --build . 

If using multi-configuration environments like Visual Studio, the correct way would be:

$ cmake .. && cmake --build . --config Release 


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!