5

GCC の libstdc++ を GNU/Linux の代わりにハッシュ スタイル SYSV でコンパイルする方法はありますか? 非常に幅広い Linux システムで動作するように会社のライブラリをコンパイルするために使用するツールチェーン (crosstool-ng 経由) があります。

これらのシステムの 1 つは、SYSV ハッシュ スタイルのみを持つ非常に古い RedHat です。ツールチェーンを使用して C のみのライブラリ/プログラムをコンパイルすると、生成されたバイナリが SYSV を使用するため、うまく機能します。

しかし、libstdc++ とリンクすると、バイナリは自動的に GNU/Linux スタイルに変更されます。その理由は、libstdc++ が GNU/Linux としてビルドされたためです。

このシステムでバイナリを実行すると、エラーが発生します

ELF file OS ABI invalid

完全を期すために、私はすでに -Wl,--hash-style=sysv を試しましたが、成功しませんでした。

また、同じバージョンの GCC、GLIBC などを持つ ARM システム用の別のツールチェーンがありますが、このツールチェーンでは libstdc++ が SYSV を使用しています。

前もって感謝します!

4

1 に答える 1

5

--disable-gnu-unique-object構成オプションを使用して GCC を再構築してみてください。GCC構成オプションに関するドキュメントによると:

--enable-gnu-unique-object

--disable-gnu-unique-object

C++ テンプレートの静的データ メンバーとインライン関数のローカル静的に gnu_unique_object 再配置を使用するように GCC に指示します。それを受け入れるアセンブラーと GLIBC 2.11 以降を使用するツールチェーンではデフォルトで有効になり、それ以外の場合は無効になります。

gnu_unique_object を使用すると、最終的な実行可能ファイルで GNU ABI が発生する可能性がありますが、これは古い Red Hat ではサポートされていません。

于 2016-08-28T08:52:31.363 に答える