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

MinGW GDB无法加载Google Test可执行文件,求静态链接配置方法

解决MinGW静态链接libgcc、libstdc++和libwinpthread的配置方法

问题背景

使用MinGW构建Google Test测试程序runTests.exe时,运行出现错误码0xc0000135,原因是程序依赖的MinGW动态库libgcc_s_dw2-1.dll、libstdc++-6.dll、libwinpthread-1.dll未随程序分发,需通过CMake配置实现静态链接这些库。

环境信息

  • GDB版本:17.1
  • g++版本:15.2.0(MSYS2项目构建)
  • Google Test版本:v1.17.0

解决方案

方法1:全局设置静态链接标志

在CMakeLists.txt中添加全局链接选项,让所有可执行文件都静态链接目标库:

# 静态链接MinGW核心运行库
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -static-libgcc -static-libstdc++ -static")
  • -static-libgcc:静态链接libgcc库
  • -static-libstdc++:静态链接libstdc++库
  • -static:静态链接libwinpthread库(若项目无需动态线程支持,此选项有效)

方法2:针对单个目标设置链接选项

如果仅需对runTests目标生效,使用target_link_options精准配置:

target_link_options(runTests PRIVATE -static-libgcc -static-libstdc++ -static)

修改后的完整CMakeLists.txt示例

cmake_minimum_required(VERSION 3.30)
project(RUN_TESTS C CXX)
set(CMAKE_BUILD_TYPE Debug)
set(CMAKE_VERBOSE_MAKEFILE ON)

set(COMMON_FLAGS "-Wall -Wextra")
set(DEBUG_FLAGS "-Og -g3")

set(CMAKE_C_STANDARD 17)
set(CMAKE_C_FLAGS ${COMMON_FLAGS})
set(CMAKE_C_FLAGS_DEBUG ${DEBUG_FLAGS})
set(CMAKE_CXX_STANDARD 23)
set(CMAKE_CXX_FLAGS ${COMMON_FLAGS})
set(CMAKE_CXX_FLAGS_DEBUG ${DEBUG_FLAGS})
set(gtest_force_shared_crt ON CACHE BOOL "" FORCE)

add_subdirectory(../googletest googletest)

include_directories(. ../googletest/googletest/include)
include_directories(.)
enable_testing()

add_executable(runTests
    App/Src/uut.c
    Test/Src/test_uut.cpp
)

# 添加静态链接配置
target_link_options(runTests PRIVATE -static-libgcc -static-libstdc++ -static)
target_link_libraries(runTests GTest::gtest_main)

include(GoogleTest)
gtest_discover_tests(runTests)

验证

重新构建程序后,运行runTests.exe不会再出现缺少DLL的错误,GDB可正常加载并调试程序。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.11 17:44:50