gpt4 book ai didi

linux - mips 交叉编译器中的 crt1.o 错误

转载 作者:太空狗 更新时间:2023-10-29 11:13:55 27 4
gpt4 key购买 nike

我想在 x86 机器上使用 gcc 生成 MIPS 二进制文件。为了安装 MIPS 交叉编译器,我遵循了 this page 上的说明。 .我可以成功安装 gcc 和 binutils。我尝试使用交叉编译器编译一个简单的 hello world 程序。

/opt/cross/bin/mipsel-unknown-linux-gnu-gcc -mips1 hi.c 

我收到以下错误。

/opt/cross/lib/gcc/mipsel-unknown-linux-gnu/4.8.2/../../../../mipsel-unknown-linux-gnu/bin/ld: cannot find crt1.o: No such file or directory
/opt/cross/lib/gcc/mipsel-unknown-linux-gnu/4.8.2/../../../../mipsel-unknown-linux-gnu/bin/ld: cannot find crti.o: No such file or directory
/opt/cross/lib/gcc/mipsel-unknown-linux-gnu/4.8.2/../../../../mipsel-unknown-linux-gnu/bin/ld: cannot find -lc
/opt/cross/lib/gcc/mipsel-unknown-linux-gnu/4.8.2/../../../../mipsel-unknown-linux-gnu/bin/ld: cannot find crtn.o: No such file or directory
collect2: error: ld returned 1 exit status

我在网上做了一些研究以找出问题所在,并将我使用的命令更改为以下命令。

/opt/cross/bin/mipsel-unknown-linux-gnu-gcc -B/usr/lib/i386-linux-gnu -mips1 hi.c

现在我收到此错误消息:

/opt/cross/lib/gcc/mipsel-unknown-linux-gnu/4.8.2/../../../../mipsel-unknown-linux-gnu/bin/ld: /usr/lib/i386-linux-gnu/crt1.o: Relocations in generic ELF (EM: 3)
/usr/lib/i386-linux-gnu/crt1.o: error adding symbols: File in wrong format
collect2: error: ld returned 1 exit status

我不确定是什么问题。我唯一能想到的是在构建 gcc 时传递给配置程序的“--without-headers”选项。 linux-mips页面给出的gcc配置命令如下。

% ../gcc-3.8.2/configure --target=$TARGET --prefix=$PREFIX \
--enable-languages=c --without-headers \
--with-gnu-ld --with-gnu-as \
--disable-shared --disable-threads \
--disable-libmudflap --disable-libgomp \
--disable-libssp --disable-libquadmath \
--disable-libatomic

我会很感激一些帮助。我生成交叉编译器的系统使用 gcc4.7.2-5。我使用 gcc-4.8.2 和 binutils-2.24 的源代码来生成交叉编译器。

最佳答案

/opt/cross/bin/mipsel-unknown-linux-gnu-gcc -mips1 hi.c

在编译命令中添加一个SYSROOT。它应该类似于:

/opt/cross/bin/mipsel-unknown-linux-gnu-gcc -mips1 --sysroot=/opt/cross/... hi.c

SYSROOT 将自动提供 header 和库路径(而不是单独添加 -I-L)。

当你有一个SYSROOT时你就会知道,因为会有一个bin/include/lib/ 在使用的​​路径中。例如,这是 arm-linux-gnueabiSYSROOT(即 arm-linux-gnueabi-gccarm-linux -gnueabi-g++):

$ ls /usr/arm-linux-gnueabi
bin include lib

因此,在此示例中,您将使用 --sysroot=/usr/arm-linux-gnueabi

如果您在定位SYSROOT 方面需要帮助,请执行查找:

$ find /usr -name crt1.o
/usr/arm-linux-gnueabi/lib/crt1.o
/usr/lib/debug/usr/lib/x86_64-linux-gnu/crt1.o
/usr/lib/x86_64-linux-gnu/crt1.o

在您的情况下,您可能会从 /opt/cross 进行搜索。显然,您需要目标 (arm-linux-gnueabi),而不是主机 (x86_64-linux-gnu)。

关于linux - mips 交叉编译器中的 crt1.o 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26198138/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com