ARM板的交叉编译?

Cross compilation for ARM board?

我试图将一个简单的 hello 程序交叉编译为独立的应用程序,它将 运行 作为 arm board 上的二进制文件,但是当 运行ning hello 二进制文件在 arm board 上时我遇到了问题。

以下是我遵循的步骤:-

make ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- hello

现在,当我使用文件命令检查 hello 的文件类型时,hello 已成功构建:-

$file 你好 你好:ELF 32 位 LSB 可执行文件,ARM,版本 1 (SYSV),静态链接,用于 GNU/Linux 2.6.31,BuildID[sha1]=0x68edccf6dba1057774e3d7853914578e53889a75,未剥离

当我将此二进制文件推送到 /data 文件夹下的 Android Linux phone 时

1- adb push hello /data

2-chmod 777 /data/hello

3-./hello(不过这里hello是不行的运行)

有人可以提示我在 phone.

上编译或 运行ning 二进制文件时犯了什么错误吗

我在 运行ning 程序时收到奇怪的错误消息,如下所示:-

root@xxx:/data#./hello

./你好

打开失败:没有那个文件或目录

1|root@xxx:/data # sh hello

嘘你好

你好[1]: 语法错误: '☺üê4┤¡♣☻♣4' 意外

1|root@xxx:/数据#

Android 需要 Position Independent Code for native libraries. Try adding -pie -fpie flags to the compiler. Another issue can be the one described by @Joe. On Android, there is a Bionic 标准库。如果您的 "hello" 程序没有使用任何标准调用,您可以尝试在没有标准库的情况下进行编译(使用 NDK 中提供的工具链):

arm-linux-androideabi-g++ -pie -fpie -nostdlib hello.c -o hello

不过,更好的选择是创建一个简单的 Android.mk 文件:

LOCAL_PATH:= $(call my-dir)
include $(CLEAR_VARS) 
LOCAL_SRC_FILES:= hello.c
LOCAL_MODULE_TAGS:= test
LOCAL_MODULE:= hello
include $(BUILD_EXECUTABLE)

并在 set up Android SDK by issuing mm 命令中使用它。

但是如果您想要使用标准库并且出于某种原因不想使用 Android.mk,那么您可以下载(并构建)所有 Android 源并将包含路径传递给gcc(示例):

arm-linux-androideabi-g++ -pie -fpie --sysroot=<path_to_android_sources>/out/target/product/<product>/obj/
-I<path_to_android_sources>/bionic/libc/arch-arm/include/ -I<path_to_android_sources>/bionic/libc/include/
-<path_to_android_sources>/bionic/libstdc++/include/