在Solaris 10上替换GCC 9.2默认链接器为Binutils 2.23 ld的问题
解决Solaris 10下GCC 9.2替换默认链接器的问题
为什么自定义specs文件的方案未生效
你的GCC编译时配置了--without-gnu-ld和--with-ld=/usr/ccs/bin/ld,这会让GCC的链接前端collect2硬编码使用编译时指定的ld路径。仅修改*md_exec_prefix无法覆盖这个硬编码配置,因此仍会调用旧版ld。
可行的替代方法
方法1:编译时用-B参数指定工具路径
-B参数会让GCC优先从指定目录查找汇编器、链接器等辅助工具,直接覆盖默认路径:
gcc -v simple.o -o simple -B/home/chip/binutils223/bin/
执行后查看-v输出的链接步骤,确认是否调用了/home/chip/binutils223/bin/ld。
方法2:调整环境变量PATH
将目标ld的路径放到PATH最前端,让GCC优先找到新版ld:
export PATH=/home/chip/binutils223/bin:$PATH gcc -v simple.o -o simple
注意:此方法会影响所有依赖PATH查找工具的命令,若仅需针对GCC修改,方法1更精准。
方法3:修改specs文件的正确配置
若坚持使用specs文件,需直接修改*linker段,强制指定新版ld的路径,而非仅修改md_exec_prefix。修改后的myspecs.txt内容如下:
*linker: collect2 --ld-path=/home/chip/binutils223/bin/ld
或者直接替换为新版ld的完整路径:
*linker: /home/chip/binutils223/bin/ld
然后执行编译命令:
gcc -v simple.o -o simple -specs=myspecs.txt
内容的提问来源于stack exchange,提问作者raffian
相关产品推荐
相关产品推荐

