gpt4 book ai didi

c++ - 使用 Catch 库无法解析的外部符号

转载 作者:搜寻专家 更新时间:2023-10-31 01:31:53 26 4
gpt4 key购买 nike

我正在迁移一些项目以使用 CMake构建系统。现在我使用 Catch 添加带有一些单元测试的项目图书馆。它是仅 header 库。旧的 Visual Studio 项目构建良好,但新的 CMake项目给出 Unresolved external symbol 链接器错误。我在我的一个源文件中定义了 CATCH_CONFIG_MAIN。添加了测试所需的其他项目的所有 cpp 文件,并链接了其他测试项目所依赖的所有库。尽管如此,我只有从 CMake 生成的 Unresolved external symbol 错误项目:

ChipCountTests.obj : error LNK2019: unresolved external symbol "public: __thiscall Catch::SourceLineInfo::SourceLineInfo(char const *,unsigned int)" (??0SourceLineInfo@Catch@@QAE@PBDI@Z) referenced in function "void __cdecl `anonymous namespace'::`dynamic initializer for 'autoRegistrar1''(void)" (??__EautoRegistrar1@?A0xb4291ec5@@YAXXZ)
1>FlyingChipRewardCalculatorUT.obj : error LNK2001: unresolved external symbol "public: __thiscall Catch::SourceLineInfo::SourceLineInfo(char const *,unsigned int)" (??0SourceLineInfo@Catch@@QAE@PBDI@Z)

显然,我没有将一些配置从 vcxproj 添加到 CMakeLists.txt,但我目前无法弄明白。

最佳答案

在我的一个文件中我有:

#define CATCH_CONFIG_MAIN
#include <catch.hpp>

但我还使用 CMake 宏将预编译头文件添加到项目中:

add_precompiled_header (${TARGET_NAME}
${CMAKE_CURRENT_SOURCE_DIR}/StdAfx.h
${CMAKE_CURRENT_SOURCE_DIR}/StdAfx.cpp)

此宏强制在所有文件中包含预编译头,但其中我有 #include <catch.hpp>没有#define CATCH_CONFIG_MAIN除一个文件外,所有文件都需要它。

我向宏添加了选项以传递不包含预编译 header 的文件列表,这解决了问题。

关于c++ - 使用 Catch 库无法解析的外部符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44677412/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com