使用Android共享对象编译程序时出现问题

时间:2016-08-09 03:52:18

标签: linux gcc java-native-interface arm

我正在尝试编写一个简单的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进行原生开发是关键,但我不想在此时冒险,除非它绝对必要。

如果有人能引导我朝着正确的方向前进,我会非常感激。

谢谢!

0 个答案:

没有答案