1. 程式人生 > >ARM交叉編譯錯誤 cannot find crt1.o:錯誤解決方案

ARM交叉編譯錯誤 cannot find crt1.o:錯誤解決方案

[cpp] view plaincopyprint?
  1. 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這個命令,可以看到:

[plain] view plaincopyprint?
  1. Using built-in specs.  
  2. COLLECT_GCC=arm-none-linux-gnueabi-gcc  
  3. COLLECT_LTO_WRAPPER=/opt/bin/../libexec/gcc/arm-none-linux-gnueabi/4.7.2/lto-wrapper  
  4. Target: arm-none-linux-gnueabi  
  5. 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  
  6. Thread model: posix  
  7. gcc version 4.7.2 (Sourcery CodeBench Lite 2012.09-64)  



在上面可以找到gcc設定的安裝路徑為:
--prefix=/opt/codesourery
所以交叉編譯器得放在/opt/codesourery這個位置上。後面為庫放得位置。注意編譯busybox的時候,應該設定sysroot為紅色部分的程式碼。

轉載出處:http://blog.csdn.net/lichangc/article/details/9109125

心得:

其他類似的交叉編譯器具有相同的效果。關鍵是--prefix路徑,即交叉編譯器生成路徑。。。 

相關推薦

ARM交叉編譯錯誤 cannot find crt1.o:錯誤解決方案

[cpp] view plaincopyprint?crt1.o: No such file or directory/opt/bin/../lib/gcc/arm-none-linux-gnueabi/4.7.2/../../../../arm-none-linux-gnu

cannot find crt1.o No such file or directory的一種解決方法

       最近在嵌入式系統上裝jpeg的庫,下載了jpegsrc.v8b.tar.gz,解壓後./configure,此時我配置的是--host=arm-none-linux-gnueabi,結果出現報錯,  看著很無語,因為這個錯誤之前在做tslib檢測觸控式螢幕時就

arm-linux-ld: cannot find sdram_init.o

其中 objc -o tar 部分 style log inux sta 原因:makefile依賴部分,少寫了.o文件,編譯時候所以找不到。 解決:在依賴部分添加上對應的文件sdram_init.o 其中紅字部分為添加的代碼 led.bin: start.o led.o

Ubuntu16.04 QT5編譯出現cannot find -lGL和collect2:error:ld r

鍵盤輸入 gre ase 系統 erro ace replace inux collect 在ubuntu下使用Qt 編譯時候遇上了cannot find -lGL錯誤,使用命令 是由於系統缺少鏈接庫,在終端執行下面命令就可以解決問題。 sudo apt-get inst

在Ubentu環境下創建arm交叉編譯環境

老師 build 目錄 更新 hello 分享 date win 例程 學校:華中科技大學機械學院 作業任務:在Ubentu環境下創建arm交叉編譯環境並且在虛擬機中編譯例程 首先,利用U盤安裝windows10+Ubuntu16.04雙系統,系統剛開始安裝,需要執行以下兩

PyQt5 Pyinstaller時出現錯誤Cannot find PyQt5 plugin directories

pyqt5 naconda exceptio when pytho body question http 解決 環境:anaconda+pyqt5 pyinstaller時出現錯誤Cannot find PyQt5 plugin directories 解決方法: 用原生的

Linux下搭建arm交叉編譯環境

首先需要在網上搜索arm-linux-gcc-4.3.2.tgz 傳到Linux下,執行tar xzvf arm-linux-gcc-4.3.2.tgz -C/ 解壓到根目錄下(目錄結構/usr/local/arm/4.3.2) 這樣,編譯器就解壓到了Linux系統中 然後建立

ubuntu14.04搭建Android-arm交叉編譯環境

前面我們搭建了NDK開發環境 下面開始搭建arm交叉編譯環境 1.下載交叉編譯工具 進入到NDK根目錄:cd /home/wjt/AndroidWorkSpace/NDK_Tools/android-ndk-r10b 下載到指定路徑指令:./build/tools/make-st

ARM交叉編譯工具鏈 gnueabi、none-eabi、arm-eabi、gnueabihf、gnueabi區別

為什麼要用交叉編譯器? 交叉編譯通俗地講就是在一種平臺上編譯出能執行在體系結構不同的另一種平臺上的程式,比如在PC平臺(X86 CPU)上編譯出能執行在以ARM為核心的CPU平臺上的程式,編譯得到的程式在X86 CPU平臺上是不能執行的,必須放到ARM CPU平臺上才能執行,雖然兩個平臺用的都是

ARM交叉編譯工具鏈的製作

今天是10.24程式設計師節日。獎勵一下自己,寫一篇實踐部落格。製作arm交叉編譯工具鏈。 目前比較新的製作交叉編譯工具鏈的軟體是crosstool-NG,非常方便,還可以編譯高版本的核心,比如4.16及以上。 Crosstool-NG的下載地址:http://crosstool-ng.gi

ARM交叉編譯工具

什麼是交叉編譯工具? 交叉編譯就是指在一種平臺架構上編譯在另外一種平臺體系架構執行的程式。常見的是在X86的伺服器上編譯ARM linux的程式,或者windows環境下編譯ARM MCU的程式。 交叉編譯工具鏈是一套綜合開發工具,包括編譯器、連結器等其他輔助工具。平時工

mac下phpize編譯提示Cannot find autoconf解決辦法

  mac下phpize編譯如下報錯: /usr/bin/phpizeConfiguring for:PHP Api Version: 20121113Zend Module Api No: 20121212Zend Extension Api No: 220121212Cannot fi

docker搭建ros-indigo-arm交叉編譯環境

ROS執行環境:ARM ubuntu14.04 + ROS indigo 在arm環境下編譯ros應用程式,速度極慢,無法忍受,嘗試在x86機器上搭建docker+ros交叉編譯環境。 交叉編譯環境的搭建主要參考: 1 ARM ubuntu環境上安裝arm-indigo

自己動手安裝ARM交叉編譯工具鏈

一,首先說一下在linux中安裝軟體的特點: 相比windows下安裝要稍顯複雜,linux中安裝一般有以下幾種方法: 1.線上安裝,譬如ubuntu中使用apt-get install vim 來安裝vim軟體 2.自己下載安裝包來安裝。這種方式的缺陷就是你不

CENTOS7錯誤:Cannot find a valid baseurl for repo: base/7/x86_6

問題:使用yum install 出現錯誤cannot find a valid baseurl… 原因:網路錯誤,不能解析映象地址 解決方案 1、進入/etc/sysconfig/network-sc

一套完整的ARM交叉編譯環境的搭建過程——不使用現成的工具鏈

Glibc是交叉編譯環境的執行庫。首先將glibc-2.13.tar解壓至build-tools,然後將glibc-linuxthreads-2.3.6.tar解壓至glibc原始碼所在目錄,將glibc-ports-2.13.tar.gz解壓至glibc原始碼所在目錄,並重命名為ports。進入

ALSA音訊庫的移植 ARM 交叉編譯 環境變數

alsa 是在LINUX出現比較晚的音訊處理庫,主要是針對原有的OSS的庫進行改進.效能更好,支援多個播放源等.但相應的,增加的程式設計的複雜性.   舊的oss是採用標準檔案IO介面,裝置打開採用open,聲音播錄是採用資料IO介面(read/write),裝置的引數

用Eclipse和GDB構建ARM交叉編譯和線上除錯環境

再次強調一次,GDB遠端除錯套件包括Host端的gdb和Target端的gdbserver,對於gdb,宿主機上發行版本自帶的PC版gdb是不能用的,它沒有目標架構(ARM)相關的除錯支援。所以我們應該使用gdb的原始碼,針對ARM平臺編譯一個(toolchain還是Host上的)特別的版本。當然,如果晶

ARM交叉編譯搭建SSH-Server至目標板

參考資料: http://blog.chinaunix.net/u1/43047/showart_371372.html http://blog.chinaunix.net/u/21948/showart.php?id=506254 步驟: 1.下載原始碼包,地址如下:

Ubuntu 16.04.1 安裝後搭建ARM交叉編譯環境編譯pjsip

1.解除安裝沒有用的軟體 sudo apt-get purge libreoffice? sudo apt-get remove vim-? sudo apt-get update sudo apt-get install vim-common