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

使用CMake和MinGW MSYS2编译GoogleTest遇错求助

MinGW MSYS2下GoogleTest编译错误的解决方法

一、官方FetchContent方式出现fileno/strdup等函数未定义的问题

这是因为MinGW默认未启用POSIX兼容宏,这些函数属于POSIX标准而非C标准库,编译时需要手动指定兼容宏:

  • 在你的CMakeLists.txt中,给gtest相关目标添加编译定义:
    # 如果用FetchContent拉取gtest,添加以下配置
    FetchContent_MakeAvailable(gtest)
    target_compile_definitions(gtest PRIVATE _POSIX_C_SOURCE=200809L _GNU_SOURCE)
    target_compile_definitions(gtest_main PRIVATE _POSIX_C_SOURCE=200809L _GNU_SOURCE)
    
  • 同时确保你用的是MSYS2的mingw64 shell(不是msys shell),工具链要对应MinGW环境。

二、用pacman安装后找不到gtest/gtest.h的问题

你误用了find_library,它只负责查找库文件,不会处理头文件路径和依赖配置。正确做法是用find_package导入gtest的CMake配置:

  1. 替换原有find_library代码为:
    find_package(GTest REQUIRED)
    
  2. 链接测试目标时,直接使用官方提供的导入目标:
    add_executable(your_test your_test.cpp)
    target_link_libraries(your_test PRIVATE GTest::gtest GTest::gtest_main)
    

这样CMake会自动处理头文件包含路径、库文件路径以及依赖项,无需手动指定。

额外注意事项

  • 确保安装的是对应架构的gtest包:你用的是mingw-w64-x86_64-gtest,就要在mingw64环境下操作,不要混用到msys环境。
  • 验证CMake工具是MinGW版本:执行cmake --version,确认输出里包含mingw-w64字样,避免用错系统自带的CMake。

内容的提问来源于stack exchange,提问作者flori10

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 17:36:16