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

-nolibc会移除哪些默认库?dl_iterate_phdr未定义引用缺失哪个库

问题解答

1. 缺失的依赖库

你遇到的_Unwind_Find_FDE函数对dl_iterate_phdr的未定义引用错误,缺失的是动态链接支持库libdl,只需要在你的链接参数末尾补充-ldl即可解决该报错。
补充说明:dl_iterate_phdr是用于遍历进程可执行文件和动态库程序头表的接口,属于libdl的导出函数,libgcc的异常回溯(unwind)模块依赖该接口实现栈展开逻辑,静态编译时不会被自动引入,需要手动指定链接。
修正后的编译命令如下:

g++ -fuse-ld=gold -O2 -o main -static -nolibc main.cpp -lgcc -lm -lc -ldl

如果你的项目代码用到了C++标准库接口,还需要额外补充自定义版本的libstdc++链接参数。

2. -nolibc参数的作用范围

-nolibc是GCC/Clang提供的链接阶段参数,作用是禁用所有C标准库相关的默认链接规则,会移除以下默认链接的库:

  • 标准C库libc(含静态版本libc.a和动态版本libc.so)
  • 数学运算库libm
  • 动态链接支持库libdl
  • 实时扩展库librt
  • POSIX线程库libpthread(仅针对默认自动链接该库的编译器版本)
    注意:-nolibc仅作用于C标准库体系组件,不会移除libgcc系列库、C标准库libstdc++的默认链接逻辑,如果需要完全自定义C标准库,还需要额外补充-nostdlib++参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 08:36:06