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
相关产品推荐
相关产品推荐

