glibc-2.3.4 を搭載した Linux ベースのファイアウォール アプライアンスがあり、そのためのプログラムをコンパイルするための gcc がありません。別の Linux マシンでプログラムをコンパイルすると、次のようなエラー メッセージが表示されます。
glibc.xxx が必要
そのバージョンのglibc用に別のLinuxマシンでacプログラムをコンパイルするにはどうすればよいですか?
glibc-2.3.4 を搭載した Linux ベースのファイアウォール アプライアンスがあり、そのためのプログラムをコンパイルするための gcc がありません。別の Linux マシンでプログラムをコンパイルすると、次のようなエラー メッセージが表示されます。
glibc.xxx が必要
そのバージョンのglibc用に別のLinuxマシンでacプログラムをコンパイルするにはどうすればよいですか?
通常、必要なバージョンまたは互換性のあるバージョンのすべてのターゲット ライブラリを含む適切なビルド環境を使用する必要があります。libc バリアントの違いは、リンクされたライブラリ名自体だけではありません。たとえば、必要な構成ファイルは異なる場合があります。一部のインターフェイスは、バージョン間で変更されたヘッダー レベルのインライン ラッパーを使用して提供できます。通常、新しいバージョンのライブラリでバイナリを実行しても安全ですが、古いバージョンでは安全ではありません。
ただし、ターゲット libc の開発パッケージがシステムに追加でインストールされている場合は、-nostdinc および -nostdlib スイッチを使用して (またはリンカを明示的に呼び出して)、必要なライブラリを明示的に指定して、バイナリを直接ビルドできます。この例は、出力から取得できgcc -v
ます。私のシステムから、それは最後のリンカコマンドです:
/usr/bin/ld --eh-frame-hdr -V -dynamic-linker /libexec/ld-elf.so.1 \ -ot /usr/lib/crt1.o /usr/lib/crti.o /usr/lib/crtbegin.o \ -L/usr/lib -L/usr/lib /tmp//ccCb5j33.o -lgcc --as-needed -lgcc_s \ --必要に応じて不要 -lc -lgcc --必要に応じて -lgcc_s --必要に応じて不要 \ /usr/lib/crtend.o /usr/lib/crtn.o
ターゲット libc の仕様に応じて、これらの命令の一部を別の命令に置き換える必要があります。特に、起動 (crt1.o および crti.o)、クリーンアップ (crtend.o、crtno.o)、libc 自体 (-lc の代わりに明示的なパス) を置き換える必要があります。オプションで、同じものが動的リンカーに適合する必要があります。
PSこれは古すぎる質問ですが、今再編集されました:)
apbuild -apgccツールは、古いバージョンの glibc シンボルとリンクするように設定します。