2015-02-11 20 views
1

如何解決以下鏈接程序錯誤w.r.t jsoncpp operator =。jsoncpp運算符中未定義的引用=

我創建了一個Json::Value對象這樣

Json::Value pt; 
pt["type"] = 5; 
pt["uuid"] = "f8c74622-d45e-4cfa-fe00-5e7042431c72"; 
pt["start frame"] = 10; 
pt["duration"] = 20; 
pt["payload"] = "aedddefffsadf"; 

當我嘗試對與Ubuntu運14.04

未定義的參考`的Json默認libjsoncpp-dev的相關鏈接這給了下面的鏈接器錯誤:: Value :: operator =(Json :: Value)'

附加信息:

我編譯並鏈接到來自GitHub的最新jsoncpp時,沒有出現鏈接器錯誤。

value.h(被Ubuntu安裝易)在/ usr/include中/ jsoncpp/JSON有

Value &operator=(const Value &other); 

和最新jsoncpp value.h有

Value &operator=(Value other); 
+0

您最好添加標籤'C++'和'C++ -11' – 2015-02-11 03:05:50

+0

添加標籤 – satheeshram 2015-02-11 21:55:48

+1

通常您需要使用與您最終想要鏈接的庫版本相同版本的頭文件進行編譯。如果您使用一個版本的頭文件進行編譯並鏈接到不同版本的庫,那麼就會發生不好的事情。如果你想能夠從Ubuntu 14.04鏈接到默認的libjsoncpp-dev,一定要使用這些頭文件。 – 2015-02-12 00:51:10

回答

0

Debian使用jsoncpp-0.6.0-rc2。我敢打賭,Ubuntu也是。

只需切換到jsoncpp-0.8.z,它們是binary-compatible with 0.6.0-rc2,幷包含來自1.y.z的大多數增強功能和缺陷修復程序。

其實Debian目前正在切換到0.8.z。直到Ubuntu更新其發貨版本,您可能必須避免使用新功能(主要是Builders),而是使用已棄用的讀者/作者,這可能是您已經做的。所以你應該很容易讓一切工作。

+0

你是說這是0.6.0-rc2中的錯誤嗎? – 2015-02-17 23:34:18

+0

不,不是一個錯誤。 '1.y.z'(和'0.7.z',偶然地)進行了非二進制兼容更改。但'0.8.z' *是與'0.6.0-rc2'二進制兼容的。這種變化是爲了複製和交換習慣用語,以提高效率,而不是真正必要的。 – cdunn2001 2015-02-18 02:40:10

+0

那麼OP如何發現自己的鏈接器錯誤只來自「Ubuntu 14.04附帶的默認libjsoncpp-dev」? – 2015-02-18 10:02:28