交叉编译ARM板?
我试图交叉编译一个简单的hello程序作为独立的应用程序,它将在arm板上作为二进制文件运行,但是我在arm板上运行hello二进制文件时遇到问题。
以下是我遵循的步骤: -
使ARCH = arm CROSS_COMPILE = arm-linux-gnueabi-你好
现在,当我使用file命令检查文件类型hello时,你好是成功构建的: -
$ file hello hello:ELF 32位LSB可执行文件,ARM,版本1(SYSV),静态链接,用于GNU / Linux 2.6.31,BuildID [sha1] = 0x68edccf6dba1057774e3d7853914578e53889a75,未删除
当我在Android数据文件夹下的Android Linux手机中推送这个二进制文件时
1- adb推送你好/数据
2-chmod 777 / data / hello
3- ./hello(但这里你好不能运行)
有人可以提醒我在编译或在手机上运行二进制文件时发生了什么错误。
运行程序时遇到奇怪的错误消息,如下所示: -
root @ xxx:/ data#./hello
。/你好
打开失败:没有这样的文件或目录
1 | root @ xxx:/ data#sh hello
你好
hello [1]:语法错误:'☺üê4┤¡♣☻♣4'意外
1 | root @ xxx:/ data#
Android需要本地库的位置独立代码。 尝试在编译器中添加-pie -fpie标志。 另一个问题可能是@Joe描述的问题。 在Android上,有一个仿生标准库。 如果你的“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)
并通过发出mm命令在其中设置Android SDK。
如果你想使用标准库,并且出于某种原因不想使用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/
链接地址: http://www.djcxy.com/p/86941.html
上一篇: Cross compilation for ARM board?
下一篇: arm