표적
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