Cross compiling static C hello world for Android using arm-linux-gnueabi-gcc

谁说我不能喝 提交于 2019-12-28 03:21:21

问题


I want to build a static hello world from C using arm-linux-gnueabi-gcc as opposed to using the NDK standalone toolchain or Codesourcery for that matter.

In Ubuntu...

I have done the following:

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

I created a hi.c like this:

#include <stdio.h>

int main(int argc, char** argv) {
   printf("hello world\n");
   return 0;
}

I have compiled it like this:

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

I ran it on an emulator like this:

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

But, I get this:

[1]   Illegal instruction     /data/hi

What step have I forgot? Based on past experience this "should" have worked, but I obviously messed this up.


回答1:


Try specifying the architecture/cpu. It sounds like the compiler is creating code with a higher architecture version than the emulator can handle.

This might work:

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



回答2:


It worked for me with CodeBench compiler on ubuntu desktop. https://sourcery.mentor.com/sgpp/lite/arm/portal/release2029

Just create a static binary with this command:

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

then push it to phone

adb push hello /data/local/tmp

go run it:

adb shell
$ chmod 755 /data/local/tmp/hello
$ /data/local/tmp/hello

This will print Hello World on terminal. Same can be done from phone also. Use terminal emulator or SL4A bash shell to execute.




回答3:


If I do this on a Debian machine (VM in my case), all seems well. I am not sure what when wrong with doing similar on ubuntu. It could be as Leo suggested, but I cannot confirm. This should work for you though.

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

Someone added this link, but it is not using the toolchain I mentioned in the description. Leaving it in case anyone is interested.

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




回答4:


As far as I know, you cannot run user-land applications within Android that are not compiled with some form of gcc-arm-linux-androideabi.




回答5:


Your code actually works for me.

I compiled it on Ubuntu and push it to /data/local/tmp

And then chmod 777 hi

Finally it works well.




回答6:


Did you check the permissions of the data folder ? Try using the local instead ! You can just use adb shell and then cd into the folder where the executable was pushed and try ./hi. I guess this is just a permissions issue



来源:https://stackoverflow.com/questions/9324772/cross-compiling-static-c-hello-world-for-android-using-arm-linux-gnueabi-gcc

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!