현재 설정이 매우 특이하므로 설명이 필요합니다.
나는 뛰고있어마츠모토 프로페셔널 에디션, Quad Cortex-A53 64비트 CPU로 구동됩니다. 운영 체제는 Debian의 64비트 버전입니다.
$ uname -a
Linux pinebook 4.4.196 #1 SMP Tue Oct 15 16:54:21 EDT 2019 aarch64 GNU/Linux
그러나 armhf 아키텍처만 기본적으로 활성화됩니다.
$ dpkg --print-architecture
armhf
aarch64 바이너리를 실행하고 싶기 때문에 적절한 아키텍처를 추가했습니다.
$ dpkg --add-architecture arm64
$ apt update && apt upgrade
$ apt install gcc-6-base:arm64 libc6:arm64 libgcc1:arm64
이것은 문제가 되지 않습니다. 그러나 이후 다른 32비트 바이너리가 갑자기 사라져서 실행할 수 없다는 것을 알게 되었습니다 /lib/ld-linux.so.3
. 그것을 확인하면 다음과 같은 결과가 나왔습니다.
$ file openocd
openocd: ELF 32-bit LSB shared object, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux.so.3, for GNU/Linux 3.2.0, BuildID[sha1]=363651b03c33118c80584e99b6f876c7a8663325, stripped
실제로 ld-linux.so.3
누락되었습니다. 그 자리에서 아키텍처별 심볼릭 링크를 찾았습니다.
$ ls /lib
aarch64-linux-gnu firmware ld-linux-armhf.so.3 systemd
arm-linux-gnueabihf ifupdown lsb terminfo
cpp init modprobe.d udev
dhcpcd ld-linux-aarch64.so.1 modules
armhf 아키텍처가 필요했기 때문에 ld-linux.so.3
아래에서 찾아보았는데 /lib/arm-linux-gnueabihf/
확실히 거기에 있었습니다. 내 문제를 해결하기 위해 연결했고 /lib
바이너리가 다시 작동했습니다.
$ ln -s /lib/arm-linux-gnueabihf/ld-linux.so.3 /lib/ld-linux.so.3
이제 문제는 이 문제를 해결하려면 직접 문제를 해결해야 한다는 것입니다 /lib
. 이는 이상적이지 않습니다. 선호되는 솔루션은 무엇입니까?
답변1
이러한 멀티 아키텍처 시스템에서 애플리케이션을 컴파일하고, patchelf --set-interpreter /lib/ld-linux-armhf.so.3 /usr/local/bin/openocd
그렇지 않은 경우 패치합니다( ). 또는 해당 동적 링커( )를 통해 명시적으로 동적으로 연결된 바이너리를 호출합니다 /lib/ld-linux-armhf.so.3 /usr/local/bin/openocd
. 명령 이름을 스크립트나 별칭으로 래핑하고 실제 바이너리를 방해가 되지 않도록 이동하여 마지막 작업을 수행할 수 있습니다.