我已经在 android marshmallow (snapdragon 650 [64bit]) 中对 Debian 进行了 chroot。
我在 chrooted debian 中安装了iceweasel。但它显示了这个错误::
(firefox:16210): Gdk-WARNING **: shmget failed: error 38 (Function not implemented) Segmentation fault
所以,我编译了libandroid-shmem.so由此回购协议使用 android-ndk 并从 armv8-a 文件夹复制到/lib
chrooted debian 目录。然后它要求liblog.so
.
iceweasel: error while loading shared libraries: liblog.so: cannot open shared object file: No such file or directory
所以我liblog.so
从 android-ndk 复制到 chrooted debian/lib
目录。
现在当我跑步时env LD_PRELOAD="/lib/libandroid-shmem.so" iceweasel
。它显示此错误:
iceweasel: error while loading shared libraries: /usr/lib/aarch64-linux-gnu/libc.so: invalid ELF header
以下是一些细节::
file /lib/libandroid-shmem.so
/lib/libandroid-shmem.so: ELF 64-bit LSB shared object, ARM aarch64, version 1 (SYSV), dynamically linked, BuildID[sha1]=5ad4582c76effbe27a6688369ad979fea5dfac2a, stripped
$ cat /usr/lib/aarch64-linux-gnu/libc.so
/* GNU ld script
Use the shared library, but some functions are only in
the static library, so try that secondarily. */
OUTPUT_FORMAT(elf64-littleaarch64)
GROUP ( /lib/aarch64-linux-gnu/libc.so.6 /usr/lib/aarch64-linux-gnu/libc_nonshared.a AS_NEEDED ( /lib/aarch64-linux-gnu/ld-linux-aarch64.so.1 ) )
答案1
你是怎么编译的?我编译并没有遇到任何错误的 elf 错误这是我编译 libandroid-shmem 的步骤
进入chroot
克隆这个存储库
git clone https://github.com/pelya/android-shmem
- 获取子模块
git submodule update --init libancillary
- 现在,要为 aarch64 或 arm64 编译它,您必须在 build.sh 脚本中进行一些更改,因此转到克隆存储库
cd android-shmem
并删除 build.sh 并使用我正在使用的任何文本编辑器创建新的六这里vi build.sh
将其复制并粘贴到 build.sh 中并保存
#!/bin/sh gcc -shared -fpic -std=gnu99 -Wall *.c -I . -I libancillary \ -o libandroid-shmem.so -Wl,--version-script=exports.txt -lc -lpthread && \ strip libandroid-shmem.so
现在运行构建脚本
./build.sh
,您可以在当前目录中看到编译后的二进制文件- 现在导出它
export LD_PRELOAD=/path/to/your/binary
答案2
问题似乎是,您使用 android-ndk 编译了库。这样它就可以链接到 android 版本的libc.so
.
在某些 Linux 发行版上libc.so
似乎是链接器脚本而不是实际的库,而 android-ndk 显然希望它是一个库。
然而,即使您将 libc.so 替换为实际库的符号链接,您编译的 libandroid-shmem.so 仍然无法工作,因为它会抱怨 libc 版本不匹配。 (我有/lib/aarch64-linux-gnu/libc.so.6: version `LIBC' not found (required by /data/data/com.termux/files/usr/lib/libandroid-shmem.so)
)
相反,直接在 chroot 环境中编译库,如中所述辅助s回答。注意:我不需要更改build.sh
脚本 - 上游提供的脚本工作得很好。