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

C++17项目链接报错:undefined reference to '_Unwind_Resume@@GCC_3.0'

依赖C++17的程序链接阶段_Unwind_Resume@@GCC_3.0未定义错误解决方法

问题描述

我有一个依赖C++17特性的程序,在链接阶段出现以下错误:

ld -o exe bin/main.o bin/AssetHandle.o bin/Font.o bin/FramerateLimiter.o bin/Image.o bin/PhysicalDeviceInfo.o bin/Renderer.o bin/ShaderCompiler.o bin/StaticMesh.o bin/StaticRenderable.o bin/Utilities.o bin/Pipeline_Pipeline.o bin/Pipeline_AnimatedMeshPipeline.o bin/Pipeline_DebugWirePipeline.o bin/Pipeline_StaticMeshPipeline.o bin/Controllers_ControllerReader.o bin/Controllers_HidHelpers.o bin/Controllers_HidPs4.o bin/Controllers_HidXbone.o -L ~/C/vcpkg/installed/x64-linux/lib -lglfw -lvulkan -ldl -lpthread -lX11 -lXrandr -lXi -lFreeImage -lhidapi-hidraw -lhidapi-libusb -ludev  -lc -lm
ld: bin/main.o: undefined reference to symbol '_Unwind_Resume@@GCC_3.0'
ld: /usr/lib64/libgcc_s.so.1: error adding symbols: DSO missing from command line
make: *** [Makefile:30: exe] Error 1

我曾了解到移除C17特性可修复该问题,但我的项目无法轻易尝试此方法。该错误在使用g或clang++编译时均会出现,相关工具版本如下:

  • clang version 14.0.0 (Fedora 14.0.0-1.fc36)
  • gcc version 12.1.1 20220507 (Red Hat 12.1.1-1) (GCC)
  • GNU ld version 2.37-27.fc36

解决方案

1. 显式链接libgcc_s库

在链接命令末尾添加 -lgcc_s 参数,确保链接器能找到_Unwind_Resume符号。修改后的链接命令示例:

ld -o exe bin/main.o bin/AssetHandle.o ... -lc -lm -lgcc_s

如果是直接使用g++/clang++完成编译+链接(而非手动调用ld),只需在编译命令末尾追加 -lgcc_s 即可,编译器会自动处理链接流程。

2. 确认C++17标准已正确启用

确保编译阶段通过 -std=c++17(或兼容GNU扩展的 -std=gnu++17)明确指定C++17标准,避免编译器默认标准不匹配引发的异常依赖。示例编译命令:

g++ -std=c++17 -c src/main.cpp -o bin/main.o

3. 调整链接顺序

链接器按从左到右的顺序解析符号,需确保依赖libgcc_s的目标文件(如main.o)在链接命令中位于-lgcc_s之前。如果使用Makefile,检查链接规则里目标文件和库的顺序是否符合要求。

4. 排查系统库路径(仅路径混乱时使用)

若系统中存在多版本libgcc_s,可通过指定库路径强制链接正确版本:

-L/usr/lib64 -lgcc_s

通常系统默认路径已配置正确,此方法仅在特殊场景下使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 17:37:00