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 57222