【问题标题】:Google Test: error LNK2019: unresolved external symbol with Visual Studio 2017 with CMakeGoogle 测试:错误 LNK2019:使用 CMake 的 Visual Studio 2017 无法解析外部符号
【发布时间】:2018-05-28 05:37:48
【问题描述】:

我目前正在尝试链接 Google Test 以为我的 Visual Studio 项目创建测试套件,但无法正确链接。
CMakeLists.txt

cmake_minimum_required (VERSION 3.11)

include_directories(include)
include_directories(${GTEST_INCLUDE_DIRS})
include_directories(${SERVER_INCLUDE_DIR})
include_directories(${OPENSSL_INCLUDE_DIR})
include_directories(${MESSAGE_HELPER_INCLUDE_DIR})
include_directories(${PROTOBUF_INCLUDE_DIR})
include_directories(${PROTOBUF_MESSAGE_INCLUDE_DIR})

file(GLOB MessageHelperLibraryTestCPPFiles "${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp")
file(GLOB MessageHelperLibraryTestHeaderFiles "${CMAKE_CURRENT_SOURCE_DIR}/include/*.h")

add_executable (MessageHelperLibraryTests
    ${MessageHelperLibraryTestCPPFiles} ${MessageHelperLibraryTestHeaderFiles})


target_link_libraries(MessageHelperLibraryTests MessageHelperLibrary)

message(WARNING ${GTEST_BOTH_LIBRARIES})
#set(GTEST_MSVC_SEARCH MT)

target_link_libraries(MessageHelperLibraryTests ${OPENSSL_LIBRARIES})
target_link_libraries(MessageHelperLibraryTests ${PROTOBUF_LIBRARIES})
target_link_libraries(MessageHelperLibraryTests ${GTEST_BOTH_LIBRARIES})

add_dependencies(MessageHelperLibraryTests MessageHelperLibrary)
add_dependencies(MessageHelperLibraryTests ProtoMessages)

#add_test(AllTestsInMessageHelperLibraryTests MessageHelperLibraryTests)

main.cpp

#include <gtest/gtest.h>

int main(int argc, char *argv[])
{
  ::testing::InitGoogleTest(&argc, argv);
  return RUN_ALL_TESTS();
}

存在构建错误。

[ERROR] LNK2019 unresolved external symbol "void __cdecl testing::InitGoogleTest(int *,char * *)" (?InitGoogleTest@testing@@YAXPEAHPEAPEAD@Z) referenced in function main

${GTEST_BOTH_LIBRARIES} 的输出是 D:/Programming_Apps/googletest/build/googlemock/gtest/Release/gtest.libD:/Programming_Apps/googletest/build/googlemock/gtest/Release/gtest_main.lib,这是这些库的正确位置,但似乎仍然无法正确找到并链接库。另一个项目不包含 main,因为它也是一个库,所以我不确定为什么会发生此错误。

【问题讨论】:

    标签: c++ cmake googletest


    【解决方案1】:

    我无法通过对库路径进行硬编码来使其工作,但是遵循他们的 README 中的文档并在 CMake 编译时创建所需的目录对我有用。

    【讨论】:

      【解决方案2】:

      gtest_maingtest 添加到您的 target_link_libraries。它可能会起作用。

      target_link_libraries(MessageHelperLibraryTests, LINK_PUBLIC gtest_main gtest)
      

      我还建议您在此处使用 CMake 宏 PROJECT_NAME 替换 MessageHelperLibraryTests。你可以试试这个。

      target_link_libraries(${PROJECT_NAME}, LINK_PUBLIC gtest_main gtest)
      

      【讨论】:

        猜你喜欢
        • 2014-10-09
        • 2013-06-15
        • 1970-01-01
        • 2014-06-10
        • 2023-03-28
        • 1970-01-01
        • 2018-10-02
        • 1970-01-01
        • 2020-07-09
        相关资源
        最近更新 更多