Linux 交叉编译找不到 crt1.o

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/7934642/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-05 06:54:15  来源:igfitidea点击:

Cross Compile Cannot Find crt1.o

clinuxgcccross-compiling

提问by Drew Galbraith

Hi I am compiling Linux from Scratch (www.linuxfromscratch.org) and I am on a step that requires my to compile a test c program to see if the compilation is working and it is failing.
The commands I am using are:

嗨,我正在从头开始编译 Linux (www.linuxfromscratch.org),我正在执行一个步骤,需要我编译一个测试 c 程序,以查看编译是否正常工作并且是否失败。
我使用的命令是:

echo "main(){}" > dummy.c
$LFS_TGT-gcc -B/tools/lib dummy.c
readelf -l a.out | grep ': /tools'

When running the second line, the compiler returns the following

运行第二行时,编译器返回以下内容

..path../bin/ld: cannot find crt1.o: No such file or directory
..path../bin/ld: cannot find crti.o: No such file or directory
..path../bin/ld: cannot find -lc
..path../bin/ld: cannot find crtn.o: No such file or directory
collect2: ld returned 1 exit status

Not sure what the problem is here and how to fix it,
So far I have reinstalled the gcc package as well as the specs file.

不确定这里的问题是什么以及如何解决它,
到目前为止我已经重新安装了 gcc 包以及规范文件。

The output of $LFS_TGT-gcc -v -B/tools/lib dummy.cis:

的输出$LFS_TGT-gcc -v -B/tools/lib dummy.c是:

Reading specs from /mnt/lfs/tools/bin/../lib/gcc/x86_64-lfs-linux-gnu/4.6.1/specs
COLLECT_GCC=x86_64-lfs-linux-gnu-gcc
COLLECT_LTO_WRAPPER=/mnt/lfs/tools/bin/../libexec/gcc/x86_64-lfs-linux-gnu/4.6.1/lto- wrapper
Target: x86_64-lfs-linux-gnu
Configured with: ../gcc-4.6.1/configure --target=x86_64-lfs-linux-gnu --prefix=/tools --disable-nls --disable-shared --disable-multilib --disable-decimal-float --disable-threads --disable-libmudflap --disable-libssp --disable-libgomp --disable-libquadmath --disable-target-libiberty --disable-target-zlib --enable-languages=c --without-pppl --without-cloog --with-mpfr-include=/mnt/lfs/sources/gcc-4.6.1/mpfr/src --with-mpfr-lib=/mnt/lfs/sources/gcc-build/mpfr/src/.libs
Thread model: single
gcc version 4.6.1 (GCC) 
COLLECT_GCC_OPTIONS='-v' '-B' '/tools/lib' '-mtune=generic' '-march=x86-64'
 /mnt/lfs/tools/bin/../libexec/gcc/x86_64-lfs-linux-gnu/4.6.1/cc1 -quiet -v -iprefix  /mnt/lfs/tools/bin/../lib/gcc/x86_64-lfs-linux-gnu/4.6.1/ -isystem /tools/include dummy.c quiet -dumpbase dummy.c -mtune=generic -march=x86-64 -auxbase dummy -version -o /tmp/ccQMiBtT.s
GNU C (GCC) version 4.6.1 (x86_64-lfs-linux-gnu)
    compiled by GNU C version 4.5.2, GMP version 5.0.2, MPFR version 3.1.0, MPC version 0.9
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
ignoring nonexistent directory "/mnt/lfs/tools/bin/../lib/gcc/x86_64-lfs-linux-gnu/4.6.1/../../../../x86_64-lfs-linux-gnu/sys-include"
ignoring nonexistent directory "/mnt/lfs/tools/bin/../lib/gcc/x86_64-lfs-linux-gnu/4.6.1/../../../../x86_64-lfs-linux-gnu/include"
ignoring duplicate directory "/mnt/lfs/tools/bin/../lib/gcc/../../lib/gcc/x86_64-lfs-linux-gnu/4.6.1/include"
ignoring duplicate directory "/mnt/lfs/tools/bin/../lib/gcc/../../lib/gcc/x86_64-lfs-linux-gnu/4.6.1/include-fixed"
ignoring nonexistent directory "/mnt/lfs/tools/bin/../lib/gcc/../../lib/gcc/x86_64-lfs-linux-gnu/4.6.1/../../../../x86_64-lfs-linux-gnu/sys-include"
ignoring nonexistent directory "/mnt/lfs/tools/bin/../lib/gcc/../../lib/gcc/x86_64-lfs-linux-gnu/4.6.1/../../../../x86_64-lfs-linux-gnu/include"
#include "..." search starts here:
#include <...> search starts here:
 /tools/include
 /mnt/lfs/tools/bin/../lib/gcc/x86_64-lfs-linux-gnu/4.6.1/include
 /mnt/lfs/tools/bin/../lib/gcc/x86_64-lfs-linux-gnu/4.6.1/include-fixed
End of search list.
GNU C (GCC) version 4.6.1 (x86_64-lfs-linux-gnu)
    compiled by GNU C version 4.5.2, GMP version 5.0.2, MPFR version 3.1.0, MPC version 0.9
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
Compiler executable checksum: ac76a9fc3d8568635f4cf190a73f3235
COLLECT_GCC_OPTIONS='-v' '-B' '/tools/lib' '-mtune=generic' '-march=x86-64'
 /mnt/lfs/tools/bin/../lib/gcc/x86_64-lfs-linux-gnu/4.6.1/../../../../x86_64-lfs-linux-gnu/bin/as --64 -o /tmp/ccjUV0Gs.o /tmp/ccQMiBtT.s
COMPILER_PATH=/tools/lib/:/mnt/lfs/tools/bin/../libexec/gcc/x86_64-lfs-linux-gnu/4.6.1/:/mnt/lfs/tools/bin/../libexec/gcc/:/mnt/lfs/tools/bin/../lib/gcc/x86_64-lfs-linux-gnu/4.6.1/../../../../x86_64-lfs-linux-gnu/bin/
LIBRARY_PATH=/tools/lib/:/mnt/lfs/tools/bin/../lib/gcc/x86_64-lfs-linux-gnu/4.6.1/:/mnt/lfs/tools/bin/../lib/gcc/:/mnt/lfs/tools/bin/../lib/gcc/x86_64-lfs-linux-gnu/4.6.1/../../../../x86_64-lfs-linux-gnu/lib/
COLLECT_GCC_OPTIONS='-v' '-B' '/tools/lib' '-mtune=generic' '-march=x86-64'
 /mnt/lfs/tools/bin/../libexec/gcc/x86_64-lfs-linux-gnu/4.6.1/collect2 --eh-frame-hdr -m elf_x86_64 -dynamic-linker /tools/lib64/ld-linux-x86-64.so.2 crt1.o crti.o /mnt/lfs/tools/bin/../lib/gcc/x86_64-lfs-linux-gnu/4.6.1/crtbegin.o -L/tools/lib -L/mnt/lfs/tools/bin/../lib/gcc/x86_64-lfs-linux-gnu/4.6.1 -L/mnt/lfs/tools/bin/../lib/gcc -L/mnt/lfs/tools/bin/../lib/gcc/x86_64-lfs-linux-gnu/4.6.1/../../../../x86_64-lfs-linux-gnu/lib /tmp/ccjUV0Gs.o -lgcc -lc -lgcc /mnt/lfs/tools/bin/../lib/gcc/x86_64-lfs-linux-gnu/4.6.1/crtend.o crtn.o
/mnt/lfs/tools/bin/../lib/gcc/x86_64-lfs-linux-gnu/4.6.1/../../../../x86_64-lfs-linux-gnu/bin/ld: cannot find crt1.o: No such file or directory
/mnt/lfs/tools/bin/../lib/gcc/x86_64-lfs-linux-gnu/4.6.1/../../../../x86_64-lfs-linux-gnu/bin/ld: cannot find crti.o: No such file or directory
/mnt/lfs/tools/bin/../lib/gcc/x86_64-lfs-linux-gnu/4.6.1/../../../../x86_64-lfs-linux-gnu/bin/ld: cannot find -lc
/mnt/lfs/tools/bin/../lib/gcc/x86_64-lfs-linux-gnu/4.6.1/../../../../x86_64-lfs-linux-gnu/bin/ld: cannot find crtn.o: No such file or directory
collect2: ld returned 1 exit status

I realize that it is super long but if someone would tell what is relevant I will trim it. Because quite honestly I don't know whats useful.

我意识到它很长,但如果有人会告诉我什么是相关的,我会修剪它。因为老实说,我不知道什么有用。

采纳答案by chill

crt1.o, crti.o and crtn.o and libc.a all come with your glibc.

crt1.o、crti.o 和 crtn.o 和 libc.a 都与您的 glibc 一起提供。

You need to have glibc compiled for your target system and installed, from the looks of it, in /tools/lib.

你需要为你的目标系统编译 glibc 并安装在 /tools/lib 中,从它的外观来看。

EDIT: Not necessarily glibc, but whatever libc you're using.

编辑:不一定是glibc,但无论您使用什么libc。

回答by Basile Starynkevitch

Pass -vto your $LFS_TGT-gccto understand what is happening.

传递-v给您$LFS_TGT-gcc以了解正在发生的事情。

回答by FractalSpace

If recompiling gcc is not an option because it is already installed with sysroot, then try this:

如果重新编译 gcc 不是一个选项,因为它已经与 sysroot 一起安装,那么试试这个:

`export CFLAGS="--sysroot=<your-gcc-sysroot>"`

(hint: libc.so.xis in <your-gcc-sysroot>/lib)

(提示:libc.so.x<your-gcc-sysroot>/lib

Then edit your makefile and replace any

然后编辑您的 makefile 并替换任何

`CFLAGS=BLA-BLA`
`CPPFLAGS=BLA-BLA`

with

CFLAGS+=BLA-BLACPPFLAGS+=BLA-BLA

CFLAGS+=BLA-BLACPPFLAGS+=BLA-BLA

回答by NEERAJ

I was facing the following problem:

我面临以下问题:

root@gccc# arm-wrs-linux-gnueabi-gcc x.c
/opt/tools/wrl3.GA/wrlinux-3.0/layers/wrll-toolchain-4.3-85/arm/toolchain/x86-linux2/bin/../lib/gcc/arm-wrs-linux-gnueabi/4.3.2/../../../../arm-wrs-linux-gnueabi/bin/ld: crt1.o: No such file: No such file or directory
collect2: ld returned 1 exit status
root@gccc# 

So when I researched it I found out that I was not able to find out the sysroot in the correct path. So I specified the sysroot on the command line and my problem was solved:

因此,当我研究它时,我发现我无法在正确的路径中找到 sysroot。所以我在命令行上指定了 sysroot,我的问题就解决了:

root@gccc# arm-wrs-linux-gnueabi-gcc x.c --sysroot=/opt/tools/wrl3.GA/sysroot.2011_05_31.18_29_24/arm11_le-glibc_small/sysroot/ -o exe