Windows下CMake搭配G++编译出现_Unwind_Resume未定义引用问题求助
问题根源
_Unwind_Resume是GCC运行时库(libgcc、libstdc++)中的异常处理符号,你用命令行编译时显式加了-static-libgcc -static-libstdc++参数,强制静态链接这些库所以能成功;但CMake构建时没传递这些参数,导致链接器找不到对应符号。
解决方法
1. 直接在CMakeLists.txt中添加静态链接参数
修改CMakeLists.txt,加入静态链接GCC运行时的编译选项,和命令行参数保持一致:
cmake_minimum_required(VERSION 3.28) project(explicit_test) set(CMAKE_CXX_STANDARD 23) set(CMAKE_CXX_STANDARD_REQUIRED ON) # 添加静态链接GCC运行时库的参数 set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -static-libgcc -static-libstdc++") add_executable(my_exe explicit.cpp)
2. 通过CMakePresets.json配置传递参数
如果依赖预设切换编译器,在对应GCC/Clang的preset里添加编译选项:
{ "version": 3, "configurePresets": [ { "name": "gcc-release", "displayName": "GCC Release", "description": "GCC 14.2.0 静态链接运行时", "generator": "Ninja", "binaryDir": "${sourceDir}/build/gcc-release", "cacheVariables": { "CMAKE_CXX_COMPILER": "g++", "CMAKE_CXX_STANDARD": "23", "CMAKE_CXX_FLAGS": "-static-libgcc -static-libstdc++", "CMAKE_BUILD_TYPE": "Release" } }, { "name": "clang-release", "displayName": "Clang Release", "description": "Clang 静态链接GCC运行时", "generator": "Ninja", "binaryDir": "${sourceDir}/build/clang-release", "cacheVariables": { "CMAKE_CXX_COMPILER": "clang++", "CMAKE_CXX_STANDARD": "23", "CMAKE_CXX_FLAGS": "-static-libgcc -static-libstdc++", "CMAKE_BUILD_TYPE": "Release" } } ] }
3. 针对Clang的额外处理
如果切换到Clang编译仍报错,可能是Clang没找到GCC的库路径,可在CMakeLists.txt中补充:
if(CMAKE_CXX_COMPILER_ID MATCHES "Clang") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -static-libgcc -static-libstdc++") # 替换成你的MinGW-W64 lib目录实际路径 link_directories("D:/mingw64/lib") endif()
验证步骤
- 删除项目下的build目录,清空CMake缓存
- 在VSCode中按
Ctrl+Shift+P,选择CMake: Configure重新加载配置 - 执行构建,检查链接错误是否消失
内容的提问来源于stack exchange,提问作者qiyuewuyi2333
相关产品推荐
相关产品推荐

