【问题标题】:Catch unit test library linking error捕获单元测试库链接错误
【发布时间】:2014-10-12 06:47:46
【问题描述】:

我正在尝试使用下面链接的 CATCH 单元测试套件。 https://github.com/philsquared/Catch

但是,我无法将其改正。 main.cpp和test.cpp如下。

//main.cpp
#define CATCH_CONFIG_MAIN 
#include "catch.hpp"

//test.cpp
#include "catch.hpp"

TEST_CASE("TESTTest", "") {
    CHECK(1 != 2 );
}

当这两个文件位于同一个文件夹中时,我可以获得所需的结果。 但是,我将test.cpp 移动到名为test 的子目录中。它不再按预期工作,但会产生链接错误。

我的 cmake 设置如下所述。

project(catchTest)
cmake_minimum_required(VERSION 2.8)

file(GLOB_RECURSE INCS "./*.cpp")
add_executable(${PROJECT_NAME} main.cpp ${INCS})

include_directories(.)

file(GLOB_RECURSE INCS "./*.cpp") 添加到包含位于子目录中的每个 cpp 源文件。并且包含include_directories(.) 是为了让他们知道catch.hpp 的定义。

我很确定我做错了什么,但我不知道如何解决它。 请建议我解决这个问题。

在Windows上运行,使用mingw gcc-4.9.1编译,由cmake ninja generator生成。

编辑:我添加了前几行错误消息。

失败:cmd.exe /c cd 。 && C:\MinGW\bin\g++.exe CMakeFiles/catchTest.dir/main.cpp.obj CMakeFiles/catchTest.dir/main.cpp.obj CMakeFiles/catchTest.dir/test/testTest.cpp.obj -o catchTest. exe -Wl,--out-imlib,libcatchTest.dll.a -Wl,--major-image-version,0,--minor-image-version,0 -lkernel32 -luser32 -lgdi32 -lwinspool -lshell32 -lole32 - loleaut32 -luuid -lcomdlg32 -ladvapi32 && cd 。 CMakeFiles/catchTest.dir/main.cpp.obj:main.cpp:(.text+0x0): `Catch::getResultCapture()'的多重定义

CMakeFiles/catchTest.dir/main.cpp.obj:main.cpp:(.text+0x0):这里首先定义

【问题讨论】:

  • 这似乎是一个多重定义符号的问题,例如:'Catch::getResultCapture() 的多重定义'
  • @KimKulling 没错。但是,我不知道内部捕获,因此不知道如何使其正确。

标签: c++ unit-testing catch-unit-test


【解决方案1】:

您的 CMakeLists.txt 错误,它包含两次 main。如果您像这样更改 add_executable-statement 它对我有用:

add_executable(${PROJECT_NAME} main.cpp test.cpp )

希望对您有所帮助。

金

【讨论】:

  • 天哪。谢谢你的帮助!!
【解决方案2】:

您必须包含正确的 catch.hpp。在存储库中有两个同名的包含:一个在 include 中,一个称为 single_include。请确保您使用的是 single_include。

【讨论】:

【解决方案3】:

当你看到像catch这样的头文件库的链接错误时,这意味着你设置了错误的包含路径。

使用single_include 而不是include。

【讨论】:

    猜你喜欢
    • 2014-08-12
    • 2023-03-26
    • 2011-09-10
    • 2013-11-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-20
    • 2020-08-25
    相关资源
    最近更新 更多