解决交叉编译到开发板不可用的问题

最近换了一个电脑专门装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

这样最后编译出来即可运行

你可能感兴趣的:(imx6)