cannot find crt1.o:错误解决方案

时间:2021-02-02 09:38:22
crt1.o: No such file or directory/opt/bin/../lib/gcc/arm-none-linux-gnueabi/4.7.2/../../../../arm-none-linux-gnueabi/bin/ld: cannot find crti.o: No such file or directorycollect2: error: ld returned 1 exit statusmake: *** [busybox_unstripped] Error 1


         我在实际开发一个项目中遇到了这个错误,花了我5天时间才发现问题并解决。出来混的 ,迟早都是要还的。最开始没有想到去理解编译器的原理,都想到直接图方便用了SBC的集成交叉编译工具链,在实际使用过程中遇到了这个问题。当时也没有去理解库加载编和执行过程中库加载的区别。即LD_LIBRARY和LIBRARY的去区别。后来才发现一个是运行加载,一个是编译加载,我们设置环境变量应该设置的为LD_LIBRARY。
出现这个错误,还有一种可能性是缺少库,但是出现这种问题,一般解决起来都容易。但是像这种交叉编译器放得路径不对的问题就很麻烦了。通过arm-none-linux-gnueabi-gcc -v这个命令,可以看到:


Using built-in specs.
COLLECT_GCC=arm-none-linux-gnueabi-gcc
COLLECT_LTO_WRAPPER=/opt/bin/../libexec/gcc/arm-none-linux-gnueabi/4.7.2/lto-wrapper
Target: arm-none-linux-gnueabi
Configured with: /scratch/jbrown/arm-linux/src/gcc-4.7-2012.09/configure --build=i686-pc-linux-gnu --host=i686-pc-linux-gnu --target=arm-none-linux-gnueabi --enable-threads --disable-libmudflap --disable-libssp --disable-libstdcxx-pch --enable-extra-sgxxlite-multilibs --with-arch=armv5te --with-gnu-as --with-gnu-ld --with-specs='%{save-temps: -fverbose-asm} %{funwind-tables|fno-unwind-tables|mabi=*|ffreestanding|nostdlib:;:-funwind-tables} -D__CS_SOURCERYGXX_MAJ__=2012 -D__CS_SOURCERYGXX_MIN__=9 -D__CS_SOURCERYGXX_REV__=64 %{O2:%{!fno-remove-local-statics: -fremove-local-statics}} %{O*:%{O|O0|O1|O2|Os:;:%{!fno-remove-local-statics: -fremove-local-statics}}}' --enable-languages=c,c++ --enable-shared --enable-lto --enable-symvers=gnu --enable-__cxa_atexit --with-pkgversion='Sourcery CodeBench Lite 2012.09-64' --with-bugurl=https://support.codesourcery.com/GNUToolchain/ --disable-nls --prefix=/opt/codesourcery --with-sysroot=/opt/codesourcery/arm-none-linux-gnueabi/libc --with-build-sysroot=/scratch/jbrown/arm-linux/install/arm-none-linux-gnueabi/libc --with-gmp=/scratch/jbrown/arm-linux/obj/pkg-2012.09-64-arm-none-linux-gnueabi/arm-2012.09-64-arm-none-linux-gnueabi.extras/host-libs-i686-pc-linux-gnu/usr --with-mpfr=/scratch/jbrown/arm-linux/obj/pkg-2012.09-64-arm-none-linux-gnueabi/arm-2012.09-64-arm-none-linux-gnueabi.extras/host-libs-i686-pc-linux-gnu/usr --with-mpc=/scratch/jbrown/arm-linux/obj/pkg-2012.09-64-arm-none-linux-gnueabi/arm-2012.09-64-arm-none-linux-gnueabi.extras/host-libs-i686-pc-linux-gnu/usr --with-ppl=/scratch/jbrown/arm-linux/obj/pkg-2012.09-64-arm-none-linux-gnueabi/arm-2012.09-64-arm-none-linux-gnueabi.extras/host-libs-i686-pc-linux-gnu/usr --with-host-libstdcxx='-static-libgcc -Wl,-Bstatic,-lstdc++,-Bdynamic -lm' --with-cloog=/scratch/jbrown/arm-linux/obj/pkg-2012.09-64-arm-none-linux-gnueabi/arm-2012.09-64-arm-none-linux-gnueabi.extras/host-libs-i686-pc-linux-gnu/usr --with-libelf=/scratch/jbrown/arm-linux/obj/pkg-2012.09-64-arm-none-linux-gnueabi/arm-2012.09-64-arm-none-linux-gnueabi.extras/host-libs-i686-pc-linux-gnu/usr --disable-libgomp --disable-libitm --enable-poison-system-directories --with-build-time-tools=/scratch/jbrown/arm-linux/install/arm-none-linux-gnueabi/bin --with-build-time-tools=/scratch/jbrown/arm-linux/install/arm-none-linux-gnueabi/bin
Thread model: posix
gcc version 4.7.2 (Sourcery CodeBench Lite 2012.09-64)



在上面可以找到gcc设置的安装路径为:
--prefix=/opt/codesourery
所以交叉编译器得放在/opt/codesourery这个位置上。后面为库放得位置。注意编译busybox的时候,应该设置sysroot为红色部分的代码。