解決交叉編譯到開發板不可用的問題
阿新 • • 發佈:2019-01-24
最近換了一個電腦專門裝ubuntu後,和往常一樣仍是裝好arm-linux-gnueabi-gcc,arm-linux-gnueabi-g++和eclips e後,寫好程式,交叉編譯之後,在板上卻顯示
-sh: ./a.out: No such file or directory
然後檢視檔案屬性
file a.out
顯示如下:
a.out: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 3.2.0, BuildID[sha1]=cfd57ddadc94410b1922a606b6c0e4fc7d6addee, not stripped
和之前同樣的交叉編譯過,但能在開發板上執行的檔案比較了一下:
file sinfo
顯示如下:
sinfo: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=4769e11eda509ac1e6b52100af3f364229e7b534, not stripped
再看了自己的GNU/Linux版本
uname -a Linux colibri-imx6 4.1.41-rt50-dirty #3 SMP PREEMPT RT Sun Aug 27 17:20:09 CST 2017 armv7l GNU/Linux
這兩個GNU/Linux和我的都不同,由於GNU/Linux版本的區別,這樣很可能是因為動態編譯的不同,導致開發板上缺少某個庫,就無法執行該檔案,故而顯示No such file or directory
解決方法:
在編譯的時候,選擇- static來進行靜態連線,這樣,所有需要的庫全會編譯進檔案裡,雖然檔案會變得很大,但是可以不依賴板上的庫執行
只用在eclipse裡,在編譯的時候在gcc-link裡面選擇- static即可
ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), statically linked, for GNU/Linux 3.2.0, BuildID[sha1]=8478b453a14004a4bc0338f990461b3416c05f63, not stripped
這樣最後編譯出來即可執行