2012-02-22 6 views
4

経由でアーカイブをリンクすることができません、次のことが実行可能ファイルを生成します。 私は(Linux)のコマンドラインでcmakeの

include_directories(/usr/lib/) 
link_libraries(usr/lib/libgsl.a usr/libgslcblas.a) 

のような行を追加すると設定が動作しているようですが、建物は失敗します。

CMakeFiles/kmv.dir/main.o: In function `main': 
main.cpp:27: undefined reference to `gsl_matrix_alloc' 
main.cpp:35: undefined reference to `gsl_matrix_fscanf' 
collect2: ld returned 1 exit status 
make[2]: *** [kmv] Error 1 
make[1]: *** [CMakeFiles/kmv.dir/all] Error 2 
make: *** [all] Error 2 
*** Failed *** 

はsynthaxの問題であると思われます。どんなヒントも大歓迎です。ありがとうございました。代わりに

include_directories(/usr/lib) 
link_libraries(usr/lib/libgsl.a usr/libgslcblas.a) 

答えて

6

[ターゲットは、作成しようとする出力バイナリの名前です

add_executable (targetName main.cpp class1.cc class2.cc) 
target_link_libraries(targetName gsl gslcblas) 

を試してみてください。パス/usr/libはすでにcmakeのためのデフォルトのライブラリ検索パスにする必要がありますので、あなたはそれを指定する必要はありませんが、あなたはカスタムライブラリのパスを指定する必要がなかった場合、あなたはとても

link_directories(/some/custom/library/path) 

ようにそれを行うだろうinclude_directories CMakeのディレクティブはおそらく

+0

いいえ、これは動作しません。上記のエラーメッセージと同じです。 – user974334

+0

私は最初の答えで少し面白かったです。ただ編集しました。私の謝罪... – hatboyzero

+0

ありがとう、それは(cblasはgslcblasに置き換えられて)動作します。実際には、パス/ usr/libを指定する必要はありません。奇妙なことに、コマンドライン用のもの(g ++ -o ...)を指定する必要があります。 – user974334

4

...ヘッダ検索パスではなく、ライブラリ検索パスを追加するために使用され、link_librariesは
http://www.cmake.org/pipermail/cmake/2009-April/028439.html

ではなくtarget_link_librariesを使用してみてください推奨されていません。

+0

トピックから外れてはいけませんが、この回答は私が投稿した賞金をどのように受け取ったのですか?私の答えは、少なくとも非公式にOPに受け入れられていたことは、数ヶ月前にはっきりしていた(コメントを参照)。 – hatboyzero

+1

私はそれを理解していませんでした。私の答えのプラス点はcmakeドメインの正式なメールだけでした。 – anishsane

+1

オハイオ州、@ hatboyzeroの質問への答えを得ました:[http://stackoverflow.com/faq#bounty _から7日間(プラス猶予期間)以内にあなたの賞金を賞賛しなかった場合、賞金の開始後に作成された最高の投票回答少なくとも2つのupvotesが賞金額の半分を授与されます._あなたが賞金を投稿して以来、あなたは自分自身にそれを手に入れることはできません。この基準に合致する他の回答のみが私の答えでした。 ] – anishsane

関連する問題