2012-09-25 10 views
7

私はclang(3.0)でC++、cmakeベースのプロジェクトをビルドしてリンクしようとしています。このプロジェクトは、カスタムディレクトリ/ my/dir /にインストールされているいくつかのライブラリにリンクしています。このディレクトリは、LD_LIBRARY_PATHおよびLIBRARY_PATH環境変数に含まれています。プロジェクトのビルドとリンクはg ++でうまくいきます。ClangリンカはLD_LIBRARY_PATHを調べません

cmakeのによって生成され、実行されたリンクコマンドは、次のようになります。

/usr/bin/clang++ -O3 stuff.cpp.o -o stuff -rdynamic -lmylib 

ldは次のメッセージで文句を言う:

/usr/bin/ld: cannot find -lmylib 

私は手動で-L/my/dir/を追加するたびに上記のリンクコマンドが正常に実行さ。 -Lフラグを指定せずにリンクする方法はありますか?

+3

['LD_LIBRARY_PATH'](http://tldp.org/HOWTO/Program-Library-HOWTO/shared-libraries.html)はリンクの依存関係を解決するのではなく、起動時にライブラリを読み込むためのものです。おそらくあなたは 'LDFLAGS'を使いたいでしょうか?興味深いもの: –

+0

私はCMakeと__g ++ __と__clang ++ __を互換的に使用しますが、似たような問題はありませんでした。私は 'link_directories()'マクロを使ってライブラリパスを定義しています。 – Hindol

答えて

7

$LD_LIBRARY_PATH環境変数(や他のUNIXベースのプラットフォーム上での様々な代替)がライブラリを検索するために、ランタイム、ないリンク時で使用されています。

-Lを使用することは正しいアプローチであり、避けることはできません。

注:あなたのプラットフォームを指定していないので、私が推測しているように、より良いアプローチは/etc/ld.so.conf.d/にファイルを正しく設定し、$LD_LIBRARY_PATHの使用を避けることです。

+1

LIBRARY_PATH変数も定義しました。この質問で説明したように、http://stackoverflow.com/questions/4250624/ld-library-path-vs-library-pathこの変数は、gccがカスタムライブラリを見つけることを可能にするものです。私はclangのために似たようなものを探しています。 –

+0

@RégisB。面白い;私は 'LIBRARY_PATH'を使ったことがありません。 '-L'を使ったときの問題は何ですか? – trojanfoe

+1

-Lオプションは、同僚と共有されているcmake設定を変更する必要があります。私は今、/etc/ld.so.conf.d/の方法を試してみます。 –

関連する問題