以下轉自:http://blog.csdn.net/laogong5i0/article/details/8212511
最近想用box2dEdit來編輯一下比較復雜的圖形然后倒入到自己有游戲里,但box2dEdit編輯后輸出的是json文件。
因為沒有用C++解析json文件的經驗,在網上找了很多有關json的開源項目,有cjson(這是c編寫的)jsoncpp(C++的項目,但有人說它的移植性不夠好)libjson(支持C和C++)由於對C有一種莫名的恐懼感,所以最后還是選擇了libjson這個庫。
OK!先得吧文件給下載下來,在google上搜libjson就能找到了,當前最新版是libjson_7.6.1,我用的也是這個版本。
打開一看,好多文件,這樣直接加到我們的project會很亂,所以要編譯成靜態庫。
那么開始編譯靜態庫吧!!
解壓剛剛下載下來的文件,打開libjson.vcproj文件(我用的是VS2010),由於是.vcproj 是VS2008的項目文件,所以我的VS會自動轉成vs2010的工程。
轉換的過程稍微等了10秒時間,一打開,杯具了~~~報錯!說有非法結束符,用.xml打開確實是少了">"符號,好吧加上去,繼續打開,還是報錯。這次實在是找不到是神馬錯了!接着開始懷疑是我VS的問題,好吧,那我在虛擬機上裝個VS2008來試試,費了好多時間(下載,安裝這是一個痛苦的過程),總算安裝完成了,趕快打開libjson。真是無語了,報了一樣的錯,花了這么長時間,連project工程都沒打開,libjson這庫也太坑爹了!!
既然工程沒辦法打開,那么就自己建一個工程來編譯好了!
好!!新建一個win32Project,如圖下圖,記得選static library這個程序類型。
新建成功后我們會來庫列表里發現2個.h文件和1個.cpp文件,這個文件是不需要的,我們可以把它刪除,它是我們在新建的時候勾選了precompled header 生成的。
按完成后可以吧壓縮文件里的源文件copy到我們的項目文件夾里,又看下圖,我們只要加入選中部分的文件即可。
然后把它添加到我們剛剛建的項目里,如下圖操作,添加后我們的庫列表就會如紅色框所看到的一樣。
OK,到了這個我們可以運行了,運行一下看看吧!!
暈死了,好多錯誤~~~~~~(難道這B就是個垃圾)
Error 12 error C1010: unexpected end of file while looking for precompiled header. Did you forget to add '#include "StdAfx.h"' to your source?d:\android\win32project\minigame\libjson\_internal\source\libjson.cpp6061libjson
他說我們的.cpp文件忘了#include “stdafx.h”文件,難道這B真是一垃圾,人肉一下“stdafx.h” (結果),原理是win32為程序的一下配置信息,既然是些沒用的東西,那我們能不能不加它呢,又再次人肉了這個問題,原理在配置里有預編譯的設置。右鍵項目屬性,如下圖,我們把 precompiled header 項改成 Not using precompiled headers,不用預編譯頭。
然后運行,哦~~還是有錯誤,好吧繼續人肉這些概述的bug,
原來在JSONOptions.h 文件里有些需要配置的地方,在我們下載下來的壓縮文件里有一個.pdf 文件,里有詳細的說明這些選項的作用。在這里我們需要吧
#define JSON_DEPRECATED_FUNCTIONS 這是主要版本的向后兼容性和易用性的過度,不知道有什么用,但document說這個是不能用的,用了會報錯,那么我們就堅決的把它注釋掉好了。
因為我們現在還是debug模式 所以要吧 #define JSON_DEBUG 開啟,這里是設置debug模式或者release模式的。注釋掉就是release模式了。
還有#define JSON_LIBRARY這個值,這是說要使用C接口還是C++接口的函數。(這里看你喜歡啦!不注釋的話就是使用C接口,我這里用的是C接口)
編譯一下,哈哈成功了!!雖然有幾個警告。找到.lib 文件,居然后4M多.
下一次再講 LIb的使用吧!!