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/
我试图将一个简单的 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/