2016-03-31 4 views
3

/usr/includeにあるライブラリを使用するために必要なことを理解できません。Cmake/Kdevelopでのライブラリの使用方法/ include

例:/ usr/include/jsonにあるjson libraryを使用します。 私のプロジェクトのmain.cppでは、私は#include <json/json.h>です。

エラーはありませんが、ライブラリの関数を使い始めると、定義されていない参照エラーが発生します。私は複数のライブラリでこの問題がある、私は何をすべきかわからない私はGoogleで検索したが、私は曖昧な答えに出くわした。

私はCMakeLists.txtファイルで何かする必要があると確信していますが、私は何が分かりません。

+0

C++でライブラリを使用するには、2つの部分があります。 (あなたのプログラムにどのシンボルが利用可能であるかを伝える)ヘッダーと(それらのシンボルを提供する)バイナリです。あなたはヘッダーを持っているので(あなたのプログラムはシンボルがどこかに存在することを知っています)、ライブラリではありません(したがってシンボルの定義がないためエラーになります)。エラーを解決するには、適切なライブラリにリンクする必要があります。 – OMGtechy

+0

すべてはjsonライブラリのreadmeで書かれています。慎重に読んでください。 – zoska

答えて

4

/usr/includeは、デフォルトでインクルード可能です。しかし、外部ライブラリを組み込む場合は、それをターゲットにリンクする必要があります。あなたのCMakeLists.txtに次の行を追加します:

target_link_libraries(your_target_name your_library_name) 

を例えば、私のマシン上(のFedora 21)jsoncppパッケージはjsoncpp名付け、それはincludeファイルだ場合、あなたは次のようにこれを行うことができますcmakeを使用しています/usr/include/jsoncpp/jsonにあります。だから私はこの

#include <jsoncpp/json/json.h> 
#include <iostream> 

int main(int, char**) 
{ 
    Json::Value val(42); 
    Json::StyledStreamWriter sw; 
    sw.write(std::cout, val); 
    return 0; 
} 

CMakeLists.txt

add_executable(test 
test.cpp 
) 

target_link_libraries(test jsoncpp) 

ようtest.cppを作成し、すべてがうまく動作します。

+0

私はあなたが言ったことをやったが、今は言う: '-ljsoncpp'を見つけることができない 私のパスは' usr/include/jsoncpp/json'です。 マイ 'CmakeLists.txt':' add_executable(cpptest main.cppに) '' target_link_libraries(cpptest jsoncpp)は ' は'(、TARGETS cpptestランタイムDESTINATIONビン)をインストール ' – Zero

+0

あなたはどのようなシステムを使うのか? – user2807083

+0

Linux Debian 8 32ビット – Zero

関連する問題