使用arm-linux-gnueabi-gcc交叉编译Android的静态C hello世界

时间:2012-02-17 08:02:30

标签: android c android-ndk arm cross-compiling

我想使用arm-linux-gnueabi-gcc从C构建静态hello世界,而不是使用NDK独立工具链或代码源。

在Ubuntu ......

我做了以下事情:

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

我创建了一个像这样的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

我忘记了什么步骤?根据过去的经验,这“应该”有效,但我显然搞砸了。

6 个答案:

答案 0 :(得分:14)

尝试指定架构/ cpu。听起来编译器正在创建具有比模拟器可以处理的更高架构版本的代码。

这可能有效:

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

答案 1 :(得分:9)

在ubuntu桌面上使用CodeBench编译器对我有用。  https://sourcery.mentor.com/sgpp/lite/arm/portal/release2029

使用此命令创建一个静态二进制文件:

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

然后, adb push hello / data

去, adb shell $ ./data/hello 这将在终端上打印Hello World。同样可以通过手机完成。使用终端模拟器或SL4A bash shell来执行。

答案 2 :(得分:3)

如果我在Debian机器上执行此操作(在我的情况下为VM),一切似乎都很好。我不确定在ubuntu上做类似的错误是什么。这可能是Leo建议的,但我无法证实。这应该适合你。

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/

答案 3 :(得分:1)

据我所知,您无法在Android中运行未使用某种形式的gcc-arm-linux-androideabi编译的用户域应用程序。

答案 4 :(得分:0)

您的代码实际上适合我。

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

然后chmod 777 hi

最后它运作良好。

答案 5 :(得分:-2)

您是否检查过数据文件夹的权限?尝试使用本地代替!您可以使用adb shell然后cd到推送可执行文件的文件夹中并尝试./hi。我想这只是一个权限问题