Debianに/lib/ld-linux.so.3を追加する正しい方法

Debianに/lib/ld-linux.so.3を追加する正しい方法

現在の設定は非常に珍しいので説明が必要です。

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

おすすめ記事