gpt4 book ai didi

android - 你如何为 Android 交叉编译 ELF 可执行文件?

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:58:24 32 4
gpt4 key购买 nike

我在下面准备了一个示例 C 代码,按照这些步骤使其在 Android 操作系统上运行,

/*test.c file*/
#include <stdio.h>

int
main(int argc, char **argv)
{
printf("Android Test Application.\n");
return 0;
}

$ arm-none-linux-gnueabi-gcc -o test test.c -Wall

我将二进制文件 --test-- 复制到目标设备“/system/bin”目录中。

当我尝试在目标系统上运行交叉编译的二进制文件时,出现此错误

$ pwd

/system/bin

$ ./test

bash: ./test: No such file or directory

$ ls -al | grep test

-rwxr-xr-x 1 0 0 8384 2011-12-22 15:26 test

虽然二进制文件 --test-- 已经在“/system/bin”目录中。

我的交叉编译器是

$ arm-none-linux-gnueabi-gcc --version

arm-none-linux-gnueabi-gcc (Sourcery G++ Lite 2009q1-203) 4.3.3 Copyright (C) 2008 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

为什么会出现此错误?

bash: ./test: No such file or directory

最佳答案

这个问题与动态加载器有关。当我用 readelf 检查二进制文件的输出时,我注意到我使用的交叉编译器有不同类型的默认动态加载器 - “/lib/ld-linux.so.3”,但 Android 使用“/system/bin/链接器”

$ readelf --program-headers test

Elf file type is EXEC (Executable file)
Entry point 0x8380
There are 8 program headers, starting at offset 52
Program Headers:
Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align
EXIDX 0x0004fc 0x000084fc 0x000084fc 0x00050 0x00050 R 0x4
PHDR 0x000034 0x00008034 0x00008034 0x00100 0x00100 R E 0x4
INTERP 0x000134 0x00008134 0x00008134 0x00013 0x00013 R 0x1
[Requesting program interpreter: /lib/ld-linux.so.3]
LOAD 0x000000 0x00008000 0x00008000 0x00550 0x00550 R E 0x8000
LOAD 0x000550 0x00010550 0x00010550 0x00124 0x00128 RW 0x8000
DYNAMIC 0x00055c 0x0001055c 0x0001055c 0x000f0 0x000f0 RW 0x4
NOTE 0x000148 0x00008148 0x00008148 0x00020 0x00020 R 0x4
GNU_STACK 0x000000 0x00000000 0x00000000 0x00000 0x00000 RW 0x4

为了改变动态加载器(动态链接器),“--dynamic-linker=/path/to/loader”应该用于链接器。

$ arm-none-linux-gnueabi-gcc -o test test.c -Wall -Wl,--dynamic-linker=/system/bin/linker

关于android - 你如何为 Android 交叉编译 ELF 可执行文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8610103/

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