1.问题:
Linux下(gcc)编译的可执行程序,放到Android设备中运行,报not executable: 64-bit ELF file:
$ gcc -static hello.cpp -o hello-exe
$ adb shell /system/bin/hello-exe
/system/bin/sh: /system/bin/hello-exe: not executable: 64-bit ELF file
2.原因:
PC上的CPU是基于X86的结构,Android设备主要基于ARM的,就导致了Linux下的程序必须重新编译才能在Android下运行。这里重新编译就需要使用【交叉编译】
见[[工具 -> Linux/Android]如何查看设备的CPU架构]
3.方案:
3.1 方案一:用交叉编译工具arm-none-linux-gnueabi-gcc编译,且静态编译-static
(1)下载
(2)安装,即复制到Linux的系统上,然后解压缩
$ tar -xjvf arm-2010.09-50-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
$ ls -la
arm-2010.09
$ cd arm-2010.09/bin
$ ls -la
-rwxr-xr-x 1 tssh tssh 569820 11月 8 2010 arm-none-linux-gnueabi-addr2line
...
-rwxr-xr-x 2 tssh tssh 225860 11月 8 2010 arm-none-linux-gnueabi-c++
...
-rwxr-xr-x 1 tssh tssh 224196 11月 8 2010 arm-none-linux-gnueabi-cpp
...
-rwxr-xr-x 2 tssh tssh 225860 11月 8 2010 arm-none-linux-gnueabi-g++
-rwxr-xr-x 2 tssh tssh 222948 11月 8 2010 arm-none-linux-gnueabi-gcc
-rwxr-xr-x 2 tssh tssh 222948 11月 8 2010 arm-none-linux-gnueabi-gcc-4.5.1
...
-rwxr-xr-x 1 tssh tssh 3186492 11月 8 2010 arm-none-linux-gnueabi-gdb
...
-rwxr-xr-x 1 tssh tssh 572220 11月 8 2010 arm-none-linux-gnueabi-str

本文介绍了在Linux系统中遇到将程序移植到Android设备时遇到的问题,由于架构不同,需要进行交叉编译。文章提供了三种解决方案:使用arm-none-linux-gnueabi-gcc、arm-linux-androideabi-gcc和arm-linux-gnueabihf-gcc交叉编译工具进行静态编译,并详细阐述了每个方案的下载、安装、配置和编译过程。然而,方案二在编译时遇到了问题。
最低0.47元/天 解锁文章
1520

被折叠的 条评论
为什么被折叠?



