ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

c – 用conan安装的gtest:对`testing :: internal :: GetBoolAssertionFailureMessage的未定义引用

2019-10-09 05:20:46  阅读:542  来源: 互联网

标签:c unit-testing googletest conan


我使用cmake来构建我的项目,使用conan来安装Google Test作为依赖项:

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})

测试/ 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

我的配置有什么问题?

解决方法:

问题是您使用默认设置(构建类型Release)安装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

标签:c,unit-testing,googletest,conan
来源: https://codeday.me/bug/20191009/1876886.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有