別のLinuxでコンパイルされたバイナリを実行する方法はありますか?もちろん、それを別のマシンで再構築するのが最も簡単なことは知っていますが、取得できるのはバイナリファイルだけだと仮定しましょう。それで、それは可能かどうか。(おそらくそれは簡単ではないことを私は知っていますが、私はただ興味があります)。
3 に答える
バイナリで使用されているのと同じまたは類似のライブラリがあれば、それは一般的に可能です。さまざまなバージョンの Linux にさまざまなバージョンのライブラリがあり、最終的にクラッシュすることがよくありますが、多くの場合ldd
、実行可能ファイルがどのライブラリを使用しているかを実行して確認し、2 番目のプラットフォームでそれらのライブラリが使用されているかどうかを確認できます。も存在します。
共有ライブラリの一致は非常に真実ですが (ldd
同一である必要がある共有ライブラリのリストを取得するために使用します)、より一般的には、システムは同じアーキテクチャである必要があります (または、x86_64 アーキテクチャで実行される x86 バイナリ用に互換ライブラリ/カーネルがインストールされている必要があります)。 )。
1 つのオプションは、カーネル ABI レベルでの互換性のみが必要になるように、静的にリンクする (または独自の共有ライブラリを提供する) ことです。もちろん、これは、非標準オプション (NIS、LDAP など) を使用するシステム/ディストリビューションがめちゃくちゃになることを意味します。
もう 1 つのオプションは、.a ファイルを配布し、ターゲット システムで最終的なリンクを実行することです。もちろん、これはシステムにコンパイラがあることを前提としていますが、おそらくオブジェクトディストリビューションにとって最も移植性があります。
ただし、どのような場合でも、アーキテクチャの互換性が必要です。x86 は最小公分母ですが、決して唯一のものではありません。
libc のバージョンが同じで、依存する他の共有ライブラリが利用可能な場合、はい、他の Linux からバイナリを実行できます。ターゲット プラットフォームのバイナリで「ldd -v」を使用して、不足しているライブラリがないかどうかを確認します。