使用arm-linux-gnueabi-gcc为Android编译静态C hello world

我想用C语言使用arm-linux-gnueabi-gcc来构build一个静态hello世界,而不是使用NDK独立工具链或者Codeourcery。

在Ubuntu中…

我做了以下几件事:

sudo apt-get install gcc-arm-linux-gnueabi 

我创build了一个hi.c像这样:

 #include <stdio.h> int main(int argc, char** argv) { printf("hello world\n"); return 0; } 

我已经这样编译了:

 arm-linux-gnueabi-gcc -static hi.c -o hi 

我在这样的模拟器上运行它:

 adb push hi /data/hi adb shell /data/hi 

但是,我得到这个:

 [1] Illegal instruction /data/hi 

我忘了什么? 根据过去的经验,这个“应该”已经起作用了,但是我显然搞砸了。

Solutions Collecting From Web of "使用arm-linux-gnueabi-gcc为Android编译静态C hello world"

尝试指定架构/ CPU。 这听起来像编译器正在创build比模拟器可以处理更高的体系结构版本的代码。

这可能工作:

 arm-linux-gnueabi-gcc -static -march=armv5 hi.c -o hi 

它在Ubuntu桌面上使用CodeBench编译器工作。 https://sourcery.mentor.com/sgpp/lite/arm/portal/release2029

用这个命令创build一个静态二进制文件:

arm-none-linux-gnueabi-gcc -o hello -static hello.c

然后,adb push hello / data

去,adbshell$ ./data/hello这将打印terminal上的Hello World。 同样可以从电话完成。 使用terminal仿真程序或SL4A bash shell来执行。

如果我在Debian机器(我的例子中是VM)上做这个,一切似乎都不错。 我不知道什么时候在Ubuntu上做类似的错误。 这可能是狮子座build议,但我不能确认。 这应该为你工作。

http://www.cnx-software.com/2012/01/16/installing-emdebian-arm-cross-toolchain-in-debian/

有人添加了这个链接,但没有使用我在描述中提到的工具链。 离开它,以防万一谁有兴趣。

http://tariqzubairy.wordpress.com/2012/03/09/arm-binaries-static-library-for-android/

据我所知,你不能在Android中运行用户login应用程序,而不是用某种forms的gcc-arm-linux-androideabi编译。

你的代码实际上适合我。

我在Ubuntu上编译它,并将其推送到/ data / local / tmp

然后chmod 777嗨

最后它运作良好。

你有没有检查数据文件夹的权限? 尝试使用本地而不是! 您可以使用adb shell,然后cd到可执行文件所在的文件夹中,然后尝试./hi。 我想这只是一个权限问题