我正在尝试编写一个简单的HelloWorld程序,使用Sourcery Codebench ARM交叉编译器在Android上运行。
最初我在Android上运行可执行文件时遇到问题,因为它被编译为动态链接的可执行文件,如下所示: hello1:ELF 64位LSB可执行文件,ARM aarch64,版本1(SYSV),动态链接(使用共享库),用于GNU / Linux 3.7.0,BuildID [sha1] = 3e1cddb8843bcaf8a1eb9777b4ebfdeb75d35501,未剥离
添加-static后,我可以将其作为静态链接程序运行,并且能够运行。
然而这还不够,我最终想做的是能够将程序编译为动态链接的可执行文件,并将其链接到Android设备上/ system / lib中的共享对象库。
我尝试使用需要libc库的简单HelloWorld程序来完成此操作。我从Android中提取了libc.so文件并尝试链接但是我收到以下错误: /usr/local/share/gcc-linaro-5.3-2016.02-x86_64_aarch64-linux-gnu/bin/../lib/gcc/aarch64-linux-gnu/5.3.1/../../../。 ./aarch64-linux-gnu/bin/ld:在搜索-lc时跳过不兼容的/home/peyman/Security/H715BL/libc.so
我不确定它正在寻找哪个.so库所以我在可执行文件上执行了readelf -d并找到了以下内容: readelf -d hello1
Dynamic section at offset 0x678 contains 24 entries:
Tag Type Name/Value
0x0000000000000001 (NEEDED) Shared library: [libc.so.6]
0x000000000000000c (INIT) 0x4003b0
0x000000000000000d (FINI) 0x400628
0x0000000000000019 (INIT_ARRAY) 0x410660
0x000000000000001b (INIT_ARRAYSZ) 8 (bytes)
...
我无法在Android设备上找到libc.so.6而且我不确定从哪里可以检索到它,但它让我卡在这里。
我知道通过我的研究,利用NDK进行原生开发是关键,但我不想在此时冒险,除非它绝对必要。
如果有人能引导我朝着正确的方向前进,我会非常感激。
谢谢!