You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 11:55:59