2013-04-05 8 views
14

私はg ++を正しいバージョンのライブラリにリンクするための環境変数を設定する方法を理解しようとしています。GCCデフォルトのリンカー検索パスの前に追加する方法は? LIBRARY_PATHが機能しない

/usr/lib64に古いブーストライブラリ(これとのリンクは失敗します)と/ v/users/regel/libの新しいライブラリがあります。したがって、リンカは新しいライブラリとリンクする必要があります。

コマンド:

$ g++ test.cpp -lboost_system -L/v/users/regel/lib 

リンクを正しくプログラム。しかし、これをリンカの番号1の検索ディレクトリに設定して、リンクするたびに '-L'を指定する必要はありません。

次の環境変数は、トリックを行うようには見えません。

$ LIBRARY_PATH=/v/users/regel/lib g++ test.cpp -lboost_system 
/tmp/regel/cc4SmBtI.o: In function `main': 
test.cpp:(.text+0x5): undefined reference to `boost::system::system_category()' 
collect2: error: ld returned 1 exit status 

$ LD_LIBRARY_PATH=/v/users/regel/lib:$LD_LIBRARY_PATH g++ test.cpp -lboost_system 
/tmp/regel/ccUreBZy.o: In function `main': 
test.cpp:(.text+0x5): undefined reference to `boost::system::system_category()' 
collect2: error: ld returned 1 exit status 

同様の科目に多数の記事や記事を読んだにも関わらず、私はまだ解決策を見つけていません。

+0

g ++を実行する前にLD_LIBRARY_PATHを設定してエクスポートしようとしましたか(g ++コマンドラインではなく)? –

+0

g ++を実行する前にLIBRARY_PATHとLD_LIBRARY_PATHの両方をエクスポートしようとしました。 – Regel

+0

@FrankSchmitt、OPのやり方と同じように設定すると、それをエクスポートするのと同じ効果があります(ただし、そのコマンドとその子に限定されます)。 –

答えて

6

GCCマニュアルsaysとして、LIBRARY_PATHは、ディレクトリをライブラリ検索パスに追加するための正しい環境変数です。

あなたはg++コマンドに-vを追加する場合は、それが使用するLIBRARY_PATHを見るべきである、とあなたはそれはあなたが指定したディレクトリが含まれており、それが-Lとしてcollect2コマンドに追加されることを確認する必要がありますが、あなたはそれが表示されます私はLIBRARY_PATH内のディレクトリが最初に来るようにする任意の方法を知らないなど-L/usr/lib

として標準ディレクトリの後にを追加取得し、私はあなたがそのための-Lを使用することがあると思います。

+2

これはなぜ受け入れられた答えですか?それは質問に答えません。 –

-1

リンカは/etc/ld.so.conf.d/内のファイルで指定されたパスを見/etc/ld.so.conf.d/での.confファイル内のライブラリパスを指定してみてくださいリンクしながら。

ファイルを作成した後に必ずldconfigを実行して、キャッシュを強制的に更新するようにしてください。

+5

私はあなたがリンカー(ld)ではなくローダー(ld.so)について話していると思います。 –

+0

なぜこの回答が「マイナス」になるのですか? gccバイナリでstraceを実行すると、/etc/ld.so.confファイルが読み込まれているのがわかります(通常はld.so.conf.d/* .confが含まれています)。 – Kuchara

関連する問題