cjson庫版本不一致,導致解析失敗
現象
在編譯一個程序demo的時候,需要繼承一個第三方庫libexample.so,第三方庫用到了cjson,本身這個程序也用到了cjson,由於兩者用的cjson的版本不一致,導致json解析失敗……
舊版本cjson
第三方庫libexample.so使用的舊版本的cjson,cjson-types截圖如下:
新版本cjson
程序demo使用的是新版本的cjson,cjson-types截圖如下:
具體現象
用舊版本的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;
版本混亂很容易造成奇怪的問題,而且這種問題往往還不容易排查!