gpt4 book ai didi

linux - ARM板的交叉编译?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:50:02 29 4
gpt4 key购买 nike

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

以下是我遵循的步骤:-

ma​​ke 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,未剥离

当我将此二进制文件推送到 Android Linux 手机中的/data 文件夹下

1- adb push hello/data

2-chmod 777/数据/你好

3- ./hello(但是这里hello是跑不起来的)

有人可以提示我在手机上编译或运行二进制文件时犯了什么错误吗。

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

root@xxx:/data # ./hello

./你好

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

1|root@xxx:/data # sh 你好

你好

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

1|root@xxx:/数据#

最佳答案

Android 需要 Position Independent Code对于 native 库。尝试向编译器添加 -pie -fpie 标志。另一个问题可能是@Joe 描述的问题。在 Android 上,有一个 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通过发布 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/

关于linux - ARM板的交叉编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34354205/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com