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

如何让GCC/Clang使用自定义库替代libgcc/compiler-rt?

用自定义低级运行时库替代libgcc或compiler-rt的方法

针对GCC的配置

GCC默认自动链接libgcc,要替换为自定义库,需结合以下编译/链接选项:

  • 用-nostdlib禁用默认标准库(含libgcc),但该选项会同时禁用其他标准库,若有额外依赖需手动指定链接
  • 直接指定自定义库的路径与名称,例如你的库为libmyrt.a且位于当前目录,编译命令如下:
    gcc -nostdlib -L./ -lmyrt your_code.c -o output
    
  • 若只需替换libgcc的特定例程、保留其余功能,可搭配-ffreestanding与-nodefaultlibs,再手动链接自定义库和所需的libgcc子集:
    gcc -ffreestanding -nodefaultlibs -L./ -lmyrt -lgcc your_code.c -o output
    

针对Clang的配置

Clang默认使用compiler-rt,替换思路与GCC类似,细节如下:

  • 先用-nostdlib禁用默认的compiler-rt与标准库
  • 手动链接自定义库,示例命令:
    clang -nostdlib -L./ -lmyrt your_code.c -o output
    
  • 若Clang仍尝试链接compiler-rt,可添加-fno-use-init-array和-fno-builtin减少默认依赖,再强制指定自定义库
  • 如需保留部分compiler-rt功能,可使用-ffreestanding,再手动链接自定义库与compiler-rt的必要组件:
    clang -ffreestanding -nodefaultlibs -L./ -lmyrt -lcrtbegin -lcrtend your_code.c -o output
    

关键注意事项

  • 自定义库必须实现编译器依赖的所有必要低级例程,比如32位系统下的64位除法、浮点异常处理、C++异常所需的栈展开函数等,否则编译后的程序会出现未定义引用错误
  • 可通过添加-v编译选项查看编译器默认链接的库列表,对照确认需在自定义库中实现的函数
  • 针对嵌入式或裸机场景,通常需配合-ffreestanding或-fno-hosted,告知编译器无需假设存在完整操作系统环境

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 16:13:16