目标
我想使用 QEMU 用户模式在 x86_64 Kali Linux 上运行 ARM64 Go 二进制文件。
问题
我有aarch64-linux-musl-cross
。
~$ wget https://musl.cc/aarch64-linux-musl-cross.tgz
~$ tar -xvf aarch64-linux-musl-cross.tgz
然后我用来~/aarch64-linux-musl-cross/bin/aarch64-linux-musl-gcc
编译一个简单的 hello world Go 程序。它完全按照我想要的方式编译。
~/go_projects/bin$ file hello
hello: ELF 64-bit LSB executable, ARM aarch64, version 1 (SYSV), dynamically linked, interpreter /lib/ld-musl-aarch64.so.1, Go BuildID=-37pQ_4dEsp4pnAgj4QV/0unDR_0nE-A-DsF1SfKd/-8CRGAArG5J0XNspP2M-/u6ChmkaiRo9qoxEE15eo, not stripped
但是,由于某种原因,解释器~/aarch64-linux-musl-cross/aarch64-linux-musl/lib/ld-musl-aarch64.so.1
与 的链接已断开/lib/libc.so
。
我有一个文件/usr/aarch64-linux-gnu/lib/libc.so
,但它只是一个文本文件。
~$ file /usr/aarch64-linux-gnu/lib/libc.so
/usr/aarch64-linux-gnu/lib/libc.so: ASCII text
~$ cat /usr/aarch64-linux-gnu/lib/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 ( /usr/aarch64-linux-gnu/lib/libc.so.6 /usr/aarch64-linux-gnu/lib/libc_nonshared.a AS_NEEDED ( /usr/aarch64-linux-gnu/lib/ld-linux-aarch64.so.1 ) )
ld-musl-aarch64.so.1
该链接应该指向什么?
答案1
哇,我在发布这篇文章后立即找到了答案......
sudo dpkg --add-architecture arm64
sudo apt update
sudo apt install -y --no-install-recommends musl:arm64
ln -f -s /lib/aarch64-linux-musl/libc.so ~/aarch64-linux-musl-cross/aarch64-linux-musl/lib/ld-musl-aarch64.so.1