Clang 3.8链接错误:-fuse-ld参数指定链接器名称无效
碰到这种链接器参数报错的问题,我之前在CentOS 7环境下也遇到过,给你拆解下原因和解决办法:
问题原因拆解
首先得明确你碰到的两个核心问题:
- Clang 3.8的参数格式限制:这个版本的Clang对
-fuse-ld=参数的要求很严格,只接受不带版本后缀的链接器名称,你写的gold-2.25带了版本号,直接触发参数无效的错误。 - 链接器未安装/版本不兼容:
- 改成
-fuse-ld=gold后仍报错,大概率是你的CentOS 7.4系统里没装gold链接器包; - 而
lld在Clang 3.8这个老版本里支持度极低,CentOS 7.4默认源里甚至没有适配的lld包,自然用不了。
- 改成
具体解决方法
给你三个递进的方案,按需选择:
方案1:直接用系统默认链接器(最快解决)
如果项目对链接器没有强制要求,直接去掉-fuse-ld=xxx这个参数就行,让Clang用系统默认的ld(GNU链接器)。
- 如果是第三方Makefile里的参数,编译时可以用环境变量覆盖:
make LD=ld - 或者直接编辑第三方Makefile,把
-fuse-ld=gold-2.25这行删掉/注释掉。
方案2:安装并正确使用gold链接器
如果必须用gold链接器,按以下步骤操作:
- 先安装gold链接器的包:
sudo yum install binutils-gold - 确认gold的可执行路径(确保系统能找到它):
which gold # 正常会输出 /usr/bin/gold - 修改编译参数:
- 自己的脚本里把
-fuse-ld=gold-2.25改成-fuse-ld=gold; - 第三方Makefile的话,用环境变量传递参数:
make CXXFLAGS="-fuse-ld=gold"
- 自己的脚本里把
方案3:升级Clang版本(长期解决方案)
Clang 3.8实在太老了,对新链接器的支持很有限。如果项目允许,建议升级到更高版本:
- 安装llvm官方的软件源:
sudo yum install centos-release-scl sudo yum install llvm-toolset-7-clang - 启用新版本的Clang:
scl enable llvm-toolset-7 bash - 之后再编译项目,此时用的是较新的Clang,再尝试
-fuse-ld=gold或-fuse-ld=lld就能正常工作了。
内容的提问来源于stack exchange,提问作者user997112
相关产品推荐
相关产品推荐

