一般に、UNIX システムは下位バイナリ互換性 (古いマシンでビルドされたバイナリが新しいマシンで引き続き実行される) をサポートしていますが、その逆はサポートしていません。新しいシステムでビルドされたバイナリが古いシステムで実行されるとは期待できません。 STT_GNU_IFUNC
最初のだけです
古いマシンで実行される新しいマシンでバイナリをビルドする必要がある場合は、このドキュメントを参照してください。
以前はこれを簡単にする「apgcc:移植可能なバイナリを作成する GCC ラッパー」がありましたが (上から参照)、なくなったようです;-(
最も簡単なオプションは、古いマシンでビルドすることです (以前は RedHat 6.2 でビルドしていましたが、結果のバイナリは どこでも 実行されました )。物理マシンで実際に RH-6.2 を実行する必要はなく、VM で起動するだけです。
もう 1 つの比較的簡単なオプションは、chroot
を組み込むことです。 、再び古いディストリビューション (RH-6.2 など) のツールとライブラリを使用します。
APGCC はもう利用できないようです (おそらくこことここを除く)。これらの glibc ヘッダーは、古いヘッダー ファイルの 1 つを含めることで、C コードから移植可能な Linux バイナリを生成する最も便利な方法のようです。
コンパイル エラー:g++:'cc1plus' を実行しようとしてエラーが発生しました:execvp:そのようなファイルまたはディレクトリはありません
exit() がプロセスの終了に失敗することはありますか?