3

glibc-2.3.4 を搭載した Linux ベースのファイアウォール アプライアンスがあり、そのためのプログラムをコンパイルするための gcc がありません。別の Linux マシンでプログラムをコンパイルすると、次のようなエラー メッセージが表示されます。

glibc.xxx が必要

そのバージョンのglibc用に別のLinuxマシンでacプログラムをコンパイルするにはどうすればよいですか?

4

2 に答える 2

2

通常、必要なバージョンまたは互換性のあるバージョンのすべてのターゲット ライブラリを含む適切なビルド環境を使用する必要があります。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これは古すぎる質問ですが、今再編集されました:)

于 2014-01-05T16:33:35.737 に答える
1

apbuild -apgccツールは、古いバージョンの glibc シンボルとリンクするように設定します。

于 2010-08-16T01:33:31.463 に答える