2

2つのバージョン間でのg++の暗黙的なLIBRARY_PATH変更に問題があります(g++ -vこの情報を提供します)。LIBRARY_PATHを、カスタムライブラリがある単一のローカルディレクトリに設定しました。ただし、g ++の1つのバージョン(バージョンAと呼びましょう)のみが正しくリンクされ、もう1つのバージョン(バージョンB)はシステムデフォルトにリンクされていることが判明しました。これは望ましくありませんでした。どうやら、ディレクトリの順序がまちまちで、私の仕様が適切に尊重されていませんでした。これは、 gcc4.2以降で/usr / libの前に使用されなくなったLIBRARY_PATHと同様の問題ですか?これらのバージョンではありませんが。

どういうわけか、私は2つの異なるバージョンのスペックファイルを見るというアイデアに思いつきました(から入手しましたg++ -dumpspecs > specs)。次に、他のバージョン(A)のspecsファイルでg ++のバージョン(B;予期しない変更を生成していた)を実行しても、その変更が生成されるかどうかを確認しようとしました。安心して、LIBRARY_PATHは正確に次のようになりました。期待していた(バージョンAに一致)!

次の行で発生するこの奇妙な変更の場所をさらに追跡しました。

. !m64 !m32;.:../lib64 m64 !m32;.:../lib32 !m64 m32;

LIBRARY_PATHの設定/変更に影響を与えているように見える以外に、残念ながらこの行が何を意味するのかわかりません。したがって、この行を「解読」して、その意味を説明して、要件に応じて変更できるようにしてください。

ありがとうございました!

4

1 に答える 1

3

$PREFIX/libこの行は、GCCのディレクトリ($PREFIXGCCがインストールされたディレクトリはどこですか)に関連するライブラリの検索方法に影響します。

それには3つの部分があります。

$PREFIX/lib/.どちらも使用されていない場合、-m32または-m64コマンドラインで使用されていない場合に使用されます。

$PREFIX/lib/.:$PREFIX/lib/../lib64が使用されるとき-m64に使用されます。

$PREFIX/lib/.:$PREFIX/lib/../lib32が使用されるとき-m32に使用されます。

これは、DebianまたはUbuntuを使用していることを示唆しています。FSFソースからのバニラGCCビルドには、仕様にそれが含まれているとは思いません。両方のGCCバージョンは.debパッケージからのものでしたか、それとも自分でインストールしましたか?(最近のDebian / Ubuntuリリースでのマルチアーチサポートはライブラリディレクトリを移動するため、バニラGCCを壊します。DebianとUbuntuは.debパッケージのGCCコードにパッチを適用すると思います。)

g++ -v各バージョンで使用されている正確なライブラリ検索パスを確認するために、各バージョンのリンクの出力を追加できますか?

また、-L代わりに使用してみませんLIBRARY_PATHか?で指定されたディレクトリは-L、システムdirまたはGCC自身のdirまたはで指定されたディレクトリの前に常に最初に来ますLIBRARY_PATH

于 2012-07-29T01:08:43.227 に答える