如何更改 crti.o 的 GCC 默认搜索目录?

How do I change GCC's default search directory for crti.o?

我想为 startfileendfilecrt1.ocrti.ocrtn.o。在命令行上传递 -B 到 GCC 驱动程序可以工作,但不方便。如何修改规格 文件 (lib/gcc/x86_64-unknown-linux-gnu/4.9.2/specs) 指定 startfile?

的搜索路径

我尝试将 -B 选项添加到 startfile 规范中,但出现错误: ld: unrecognized option '-B/gsc/btl/linuxbrew/lib'

然后我尝试将 -B 选项添加到 cc1 规范并得到错误: cc1: error: command line option '-B/gsc/btl/linuxbrew/lib' is valid for the driver but not for C

如果无法通过 specs 文件执行此操作,是否有实现相同目标的环境变量或 GCC 配置选项?

我在主目录中安装了最新版本的 glibc。一切都很好。我已经将 specs 文件修改为 link 针对新版本 glibc,但它仍然 link 针对 /usr 中的旧系统版本 startfileendfile.

这是一个 the unanswered question on the gcc-help mailing list. Here's a related Linuxbrew bug, gfortran is broken with stand alone Linuxbrew, and a proposed fix, gcc, binutils: link to Cellar instead of system libs

谢谢,
肖恩

根据https://wiki.debian.org/Multiarch/LibraryPathOverview,gcc会在$(sysroot)/lib中寻找crt1.o等启动文件,所以你可以在运行时指定--sysroot选项gcc,或者用 --with-sysroot.

编译 gcc

您可以在规范文件的 *startfile:*endfile: 部分使用绝对路径,而不是默认的相对路径。这将覆盖 GCC 对默认位置的选择。