WSL中CMake调用Windows路径GTest引发编译错误的问题
解决WSL中CMake优先调用Windows侧GTest的问题
问题原因
WSL会自动挂载Windows磁盘到/mnt目录,CMake的find_package机制会遍历所有系统路径,包括挂载的Windows路径,所以优先找到了/mnt/c/msys64/mingw64/lib/cmake/GTest下的配置文件,导致链接阶段混用了Windows和WSL的GTest库,进而出现重复定义、未定义引用错误。而直接用g++编译时你手动指定了头文件和库路径,所以不会触发这个问题。
解决方法
方法一:强制CMake仅查找WSL本地包
在CMakeLists.txt中调用find_package(GTest REQUIRED)之前,添加以下配置,让CMake忽略跨系统的路径查找:
# 仅在WSL本地路径查找包,不考虑挂载的Windows路径 set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY) # 禁止GTest查找系统外路径 set(GTest_NO_SYSTEM_PATHS ON) find_package(GTest REQUIRED)
方法二:手动指定GTest的头文件和库路径
绕开find_package机制,直接使用你手动放置的GTest文件:
# 添加头文件目录 include_directories(/usr/local/include) # 添加库文件目录 link_directories(/usr/lib) add_executable(your_test_exec your_test_source.cpp) # 链接GTest库和线程库 target_link_libraries(your_test_exec gtest gtest_main pthread)
方法三:移除Windows侧的GTest配置(不推荐)
如果你不需要在Windows侧使用msys64的GTest,可以直接删除/mnt/c/msys64/mingw64/lib/cmake/GTest目录,这样CMake就只能找到WSL本地的GTest配置。
内容的提问来源于stack exchange,提问作者Rudransh Srivastava
相关产品推荐
相关产品推荐

