cjson庫版本不一致,導致解析失敗

cjson庫版本不一致,導致解析失敗

現象

在編譯一個程序demo的時候,需要繼承一個第三方庫libexample.so,第三方庫用到了cjson,本身這個程序也用到了cjson,由於兩者用的cjson的版本不一致,導致json解析失敗……

舊版本cjson

第三方庫libexample.so使用的舊版本的cjson,cjson-types截圖如下:
cjson_old_version

新版本cjson

程序demo使用的是新版本的cjson,cjson-types截圖如下:
cjson_new_version

具體現象

用舊版本的cJSON源碼編譯到自己的代碼裏,編譯出libexample.so庫;
程序demo已經使用過新版本的cJSON源碼,但是又連接了上面編譯出來的libexample.so的庫,再次進行json解析,會發現libexample.so裏面解析cJSON_Number類型的節點的值會失敗;
然後重新用新版本的cJSON源碼編譯出libexample.so庫,再集成到上面的demo裏面,即可解析成功。

分析

可以從上面兩個不同版本的cjson源碼截圖的cjosn-types看出來:
這兩個版本的cJSON Types的值不一樣,比如cJSON_Number類型節點的值,舊版本的值是3, 新版本的值是8,
所以用舊版本編譯的libexample.so庫,集成到demo裏的時候,解析到cJSON_Number節點的時候,錯誤的使用值8而不是3,所以導致解析失敗

結論

代碼裏一定要保持一個版本的cjson;
版本混亂很容易造成奇怪的問題,而且這種問題往往還不容易排查!

發佈了8 篇原創文章 · 獲贊 14 · 訪問量 4416
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章