重新编译工具链,验证时报告crt1.o找不到

发布于 2022-09-15 11:49:11 字数 737 浏览 14 评论 6

我重新编译了整个工具链,一直到gcc的第三步,编译过程没什么问题,但是最后我想验证一下编译出来的工具链是否可用,就写了个helloworld来测试,结果报告:
GNU ld (GNU Binutils) 2.19.51.20090709
  Supported emulations:
   elf32ppclinux
   elf32ppc
   elf32ppcsim
../build/install/lib/gcc/powerpc-linux-gnu/4.4.1/../../../../powerpc-linux-gnu/bin/ld: crt1.o: No such file: No such file or directory
collect2: ld returned 1 exit status

[harryhe@auslxv15 test]$ find ../build/install/ -name "crt1.o"
../build/install/powerpc-linux-gnu/libc/usr/lib/crti.o

既然crt1.o已经产生了,但是ld并没有到正确的目录下寻找这个库,我觉得可能是编译脚本中某个配置写错了,但是我不知道大概是哪个模块的配置有关系。谁能解释一下ld到底是如何寻找crt1.o的?以及gcc或者binutils的configuration里哪个配置项和它有关呢?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

痴梦一场 2022-09-20 07:27:27

最方便的方式是,拷贝现有的

↙温凉少女 2022-09-20 07:21:43

拷贝本机的就可以吧

反差帅 2022-09-20 06:44:23

回复 4# harry_he

> 那么--with-sysroot一定使用prefix指定的目录的某个子目录么?

不一定。你可以用将库和头文件放在任意地方,然后使用--with-sysroot来指定。

> 还有--with-build-sysroot是在使用非本次编译产生的库时用的么?

用于当构建目标库时,来指定GCC的系统根目录。原文如下:

--with-build-sysroot
--with-build-sysroot=dir
    Tells GCC to consider dir as the system root (see --with-sysroot) while building target libraries, instead of the directory specified with --with-sysroot. This option is only useful when you are already using --with-sysroot. You can use --with-build-sysroot when you are configuring with --prefix set to a directory that is different from the one in which you are installing GCC and your target libraries.

    This option affects the system root for the compiler used to build target libraries (which runs on the build system); it does not affect the compiler which is used to build GCC itself.

简单爱 2022-09-19 20:36:01

还有不明白的是,编译各个component的时候还要指定--prefix,表示要将编译好的东西放到这个目录下,那么--with-sysroot一定使用prefix指定的目录的某个子目录么?还有--with-build-sysroot是在使用非本次编译产生的库时用的么?

神经大条 2022-09-19 20:15:32

多谢EricFisher,crt1.o没有问题,现在问题是如何配置gcc第三步中sysroot。如果采用如下方式配置,生成的gcc就会在${fsbuild_install}/${fsbuild_target}/libc/usr/lib目录下搜索crt1.o,这就是我所期待的,也是--with-sysroot所声明的。但是编译完成toolchain之后我可以把${fsbuild_install}移到别的目录下,gcc仍然可以找到正确的crt1.o,当然这个时候crt1.o已经不在${fsbuild_install}/${fsbuild_target}/libc/usr/lib下了,这就是我疑惑的地方。
                --with-sysroot=${fsbuild_install}/${fsbuild_target}/libc
                --with-build-sysroot=${fsbuild_install}/${fsbuild_target}/libc

左秋 2022-09-19 01:55:37

先查一下,crt1.o是否在搜索路径,是否被gcc搜索到。

再查一下,`file crt1.o`的文件格式是否是ld缺省使用的格式。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文