gtest 与 Conan 一起安装:未定义对“testing::internal::GetBoolAssertionF
gtest installed with conan: undefined reference to `testing::internal::GetBoolAssertionFailureMessage`
我用cmake来构建我的项目,用柯南来安装谷歌测试作为依赖项:
柯南文件.txt
[requires]
gtest/1.7.0@lasote/stable
[generators]
cmake
[imports]
bin, *.dll -> ./build/bin
lib, *.dylib* -> ./build/bin
CMakeList.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})
测试/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
}
建
$ conan install --build=missing
$ mkdir build && cd build
$ cmake .. && cmake --build .
我可以使用ASSERT_STREQ
,但是如果我使用EXPECT_FALSE
则会出现意外错误:
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
我的配置有什么问题?
问题是您使用默认设置(即构建类型发布)安装 conan 依赖项:
$ conan install --build=missing
# equivalent to
$ conan install -s build_type=Release ... --build=missing
默认设置可以在conan.conf
文件中查看
然后,你在 nix 系统中使用 cmake,默认构建类型是 Debug,这是一个单 conf 环境(与多配置调试/发布环境相反,如 Visual Studio),所以当你这样做时:
$ cmake .. && cmake --build .
# equivalent to
$ cmake .. -DCMAKE_BUILD_TYPE=Debug && cmake --build .
调试/发布版本的不兼容性会导致该未解决的问题。因此,解决方案是使用与已安装依赖项匹配的相同构建类型:
$ cmake .. -DCMAKE_BUILD_TYPE=Release && cmake --build .
如果使用像Visual Studio这样的多配置环境,正确的方法是:
$ cmake .. && cmake --build . --config Release
就我而言,我遇到了这个问题,因为在 Redhat 7 上,然后使用旧的 libstdc++。对于 conan 默认包二进制文件/库来说太旧了。
我已经通过使用"--build gtest"arg重建gtest来解决这个问题。
相关文章:
- Atom gpp编译器给出"'C:UsersadminUser' is not recognized as an internal or..."错误
- 谷歌测试编译错误 Os X:函数式转换从"int"到"internal::FloatingEq2Matcher"的模糊转换<float>
- 如何解决g++问题"internal compiler error: Illegal instruction min() _GLIBCXX_USE_NOEXCEPT { return __FLT_MI
- C++构造函数具有内部链接,但未定义 [-Wundefined-internal]
- 为什么日食总是发生错误"An internal error occurred during: "通知选择侦听器". java.lang.StackOverflowError"
- gtest - 未定义对"testing::InitGoogleTest(int*, char**)"的引用
- Lambda`s internal this in c++
- 使用libmosquitto的客户端使用TLS获得"tlsv1 alert internal error",没有TLS即可正常工作
- 命名空间 v8 和命名空间 v8::internal 有什么区别?
- gtest 与 Conan 一起安装:未定义对“testing::internal::GetBoolAssertionF
- 加载共享库时未定义的符号"tbb internal Allocate"
- 错误"<url> is not recognized as an internal or external command, operable program or batch file.
- I/O流操纵器-AndingField Internal -C vsC
- 对Google :: ProtoBuf :: Internal :: empty_string_ [abi:cxx11]
- 在windbg中"!heap -h"输出中"Internal"的含义是什么?
- C++Protobuf错误google::Protobuf::internal::kEmptyString错误
- GCC "Internal compiler error: Error reporting routines re-entered"(包括完整代码)
- 有人熟悉"implementation/internal header"(*.ih)吗?
- g肥皂 EWS "Error 500: Internal Server Error"
- gmock在mock_method上编译错误(在testing::internal::FunctionMocker中)