1. 程式人生 > >解決交叉編譯到開發板不可用的問題

解決交叉編譯到開發板不可用的問題

最近換了一個電腦專門裝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

這樣最後編譯出來即可執行