2016-03-31 7 views
3

Ich verstehe nicht, was ich tun muss, um eine Bibliothek zu verwenden, die sich in/usr/include befindet.Wie verwende ich/Bibliotheken in Cmake/Kdevelop

Zum Beispiel: Ich möchte die json library verwenden, die sich in/usr/include/json befindet. In meinem Projekt 'main.cpp' mache ich #include <json/json.h>.

Ich bekomme keine Fehler, aber wenn ich anfange, die Funktionen in der Bibliothek zu verwenden, bekomme ich undefinierte Referenzfehler. Ich habe dieses Problem mit mehreren Bibliotheken, ich habe keine Ahnung, was zu tun ist, ich suchte auf Google, aber ich stieß nur auf vage Antworten.

Ich bin mir ziemlich sicher, ich muss etwas in der Datei CMakeLists.txt tun, aber ich habe keine Ahnung was.

+0

Es gibt zwei Teile zum Verwenden einer Bibliothek in C++; die Header (Ihrem Programm mitteilen, welche Symbole verfügbar sind) und die Binaries (die diese Symbole bereitstellen). Sie haben die Header (so dass Ihr Programm weiß, dass die Symbole irgendwo existieren), aber nicht die Bibliotheken (es gibt also keine Definition für diese Symbole, daher Ihr Fehler). Sie müssen in der entsprechenden Bibliothek eine Verknüpfung herstellen, um die Fehler zu beheben. – OMGtechy

+0

Alles ist in json Bibliothek readme geschrieben. Lesen Sie es sorgfältig durch. – zoska

Antwort

4

/usr/include ist standardmäßig für Include verfügbar. Wenn Sie jedoch eine externe Bibliothek hinzufügen, müssen Sie sie mit Ihrem Ziel verknüpfen. Falls Sie verwenden cmake dies wie folgt durchgeführt werden kann: Fügen Sie Ihre CMakeLists.txt die folgende Zeile:

target_link_libraries(your_target_name your_library_name) 

Zum Beispiel auf meinem Rechner (Fedora 21) jsoncpp Paket jsoncpp genannt, und es ist include Dateien sind in /usr/include/jsoncpp/json. So schaffe ich test.cpp wie diese

#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; 
} 

und CMakeLists.txt

add_executable(test 
test.cpp 
) 

target_link_libraries(test jsoncpp) 

und alles funktioniert gut.

+0

Ich habe getan, was Sie gesagt haben, und jetzt heißt es: 'kann -ljsoncpp' nicht finden Mein Pfad ist:' usr/include/jsoncpp/json'. Mein 'CmakeLists.txt':' add_executable (cpptest main.cpp) '' target_link_libraries (cpptest jsoncpp) '' installieren (cpptest RUNTIME DESTINATION bin targets) ' – Zero

+0

welches System Sie verwenden? – user2807083

+0

Linux Debian 8 32 bit – Zero