2011-03-02 64 views
3

我想在我的C++代碼中實現jsoncpp庫,我寫了一段簡單的代碼來試用它,它甚至不編譯。包括jsonCpp頭部的問題

#include <stdio.h> 
#include <stdlib.h> 
#include <stddef.h> 
#include <string.h> 

#ifndef json_included 
#define json_included 
#include "jsoncpp\include\json\json.h" 
#endif 

//#include "json\jsonC\json.h" 
int main(int argc, char **argv) 
{ 

std::string example = "{\"array\":[\"item1\", \"item2\"], \"not an array\":\"asdf\"}"; 
Json::Value value; 
Json::Reader reader; 

bool parsed = reader.parse(example, value, false); 
std::cout << parsed; 
return 0; 
} 

我得到的錯誤是:

undefined reference to `Json::Reader::parse(std::string const&, Json::Value&, bool)' 
undefined reference to `Json::Reader::Reader()' 
undefined reference to `Json::Value::~Value()' 
undefined reference to `Json::Value::Value(Json::ValueType)' 

我有點新的C++,有什麼我失蹤的包含語句?或者jsonCpp需要額外的東西?

謝謝你的時間!

+0

包括(您正在使用的)不是stdio.h(您不是),以及Tomalamala指出的。此外,你幾乎肯定不需要#ifndef json_included的東西,因爲它應該在你正在討論的頭文件中。 – 2011-03-02 22:06:34

回答

0

您需要鏈接到json庫,例如使用-ljson_linux-gcc-4.4.3_libmt

您可以通過查找庫目錄找到確切的庫名稱,例如:/usr/lib目錄

如果你正在使用Visual Studio,添加的.lib文件項目屬性,鏈接,輸入,附加依賴並指定項目屬性,鏈接,一般情況下,路徑附加庫目錄

5

你的代碼正在編譯,但它沒有鏈接。您忘了將JSON共享庫文件提供給鏈接器(或者,在較新的版本中,將合併的jsoncpp.cpp添加到您的項目中)。

不知道更多關於您的開發環境,很難給你更具體的說明。

順便說一句,你正在編寫C++;請使用C++頭文件cstdio,而不是stdio.h。你也沒有包括C++ string,並且幸運的是它通過一些JSON頭部「工作」,包括它。

2

「未定義參考」聽起來像鏈接器問題。 jsoncpp是否帶有需要鏈接的庫,例如.so,.a,.lib或.dll文件?

根據jsoncpp README,庫必須首先使用scons構建。據推測,這將輸出一個庫文件,如.so,.a,.lib或.dll文件。然後,您必須遵循編譯器的規則來鏈接這樣的庫(例如,在編譯時將其添加到命令行的末尾,或將其添加到IDE中項目配置中的「其他庫」字段)。

+0

它帶有一個包含所有頭文件的包含文件夾和一個包含所有.cpp文件的src文件夾。是否需要編譯到庫中?我認爲預處理器命令#include基本上採用了它指向的任何代碼並將其替換。 – 2011-03-04 16:19:54

+0

'#include'確實只是在文本上包含指定的文件。但是,它不包含.cpp文件。你需要單獨編譯它們並鏈接到它們(請參閱我編輯的答案。) – 2011-03-04 16:56:17

0

兩個潛在的問題:

  • 有一個在jsoncpp庫代碼的某些版本中有一個錯誤amalgated需求,成爲融合的連接才能正常工作。

  • 至於其他的答案建議,#包括

0

後您編譯jsoncpp你可以找到庫中的文件夾庫/。爲了方便起見,你可以將它放在/ usr/lib中,然後在運行時通過將-llibjson_linux-gcc-4.4.3_libmt作爲參數傳遞給g ++來鏈接它。

我已將libjson_linux-gcc-4.4.3_libmt.so更名爲libjson.so,並可通過指定-ljson將其鏈接。

+0

你是如何在xcode中構建JsonCpp的。我是xcode環境的新手 – Navin 2012-10-23 05:45:47

1

在我的情況下(在Ubuntu上使用的代碼塊IDE)的問題是,我需要(從jsoncpp項目中generatedpython amalgamate.py)添加json.cpp文件到我的構建目標。

換句話說,我在g++編譯語句中增加了一個-c jsoncpp.cpp選項。