
現在の設定は非常に珍しいので説明が必要です。
私は走っている松本プロフェッショナルエディション、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
。コマンド名をスクリプトまたはエイリアスでラップし、実際のバイナリを妨げないように移動して最後の操作を実行できます。