Google Test:错误 LNK2019:使用 Visual Studio 2017 与 CMake 进行未解析的外
Google Test: error LNK2019: unresolved external symbol with Visual Studio 2017 with CMake
我目前正在尝试链接Google Test为我的Visual Studio项目创建一个测试套件,但无法使其正确链接。
CMakeList.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)
主.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,因为它也是一个库,所以我不确定为什么会发生此错误。
我无法通过对库路径进行硬编码来使其工作,但是按照他们的自述文件中的文档并在 CMake 编译时创建所需的目录对我有用。
将gtest_main>est添加到您的target_link_libraries。它可能会起作用。
target_link_libraries(MessageHelperLibraryTests, LINK_PUBLIC gtest_main gtest)
我还建议您使用 CMake Macro PROJECT_NAME 来替换这里的 MessageHelperLibraryTests。你可以试试这个。
target_link_libraries(${PROJECT_NAME}, LINK_PUBLIC gtest_main gtest)
相关文章:
- 如何创建一个CMake变量,除非显式重写,否则使用默认值
- 使用 CMake,Microsoft MPI 和 Visual Studio 2017 找不到 mpi.h
- 智能感知不适用于Visual Studio 2017中的cmake项目
- VS 2017 中的 CMake 在构建时不显示构建日志
- CMake 库目标并不总是出现在 Visual Studio 2017 的"启动项"下拉列表中。
- VS 2017 CMake 无法识别宏
- 在Visual Studio 2017中使用boost asio tcp与CMake
- Google Test:错误 LNK2019:使用 Visual Studio 2017 与 CMake 进行未解析的外
- 适用于Visual Studio 2017的CMake Multi-Project设置
- 使用CMAKE生成Visual Studio 2017项目
- 在Visual Studio 2017中使用Qt库的CMake项目:运行exe时找不到Qt dll
- 如何最好地为 Visual Studio 2017 构建的 CMake C++ 项目设置输出目录
- Visual Studio 2017,Boost和Cmake的版本号
- 使用Visual Studio 2017和Cmake的Libzip库
- 使用CMAKE与Visual Studio BuildTools 2017;无法访问UWP libs
- 使用Cmake与Visual Studio 2017一起构建ssh.dll
- 从Visual Studio 2017运行CMake的PACKAGE目标
- Visual Studio 2017-禁用依赖项的CMAKE
- CMAKE错误:无法创建名为“发电机Visual Studio” 15 2017 Win64-T
- 如何与CMAKE一起使用VS 2017编译的Boost Filesystem库