JSONCpp在windows下的VC6編譯和呼叫
其實很簡單,但是不知道的時候根本無從下手,後來看到別人分享的例子,才知道怎麼編譯的。
1、從官網上下載原始碼,當前版本0.5.0
2、解壓縮
3、開啟VC6,新建工程 win32 static library
4、將src裡面的原始碼全部複製到我們新建的工程目錄下。
5、把include下面的json資料夾複製到新建的工程目錄下。
6、將裡面的warning 4785遮蔽掉。
#pragma warning( disable : 4786 )
編譯通過,OK~
-------------------------------------------------------------
在測試lib檔案時發現了問題
VC中使用靜態庫的方法
#pragma comment(lib, “xxx.lib”)
但在編譯你應用程式時可能出現類似如下的錯誤
1>libcmtd.lib(invarg.obj) : error LNK2005: __invoke_watson 已經在 MSVCRTD.lib(MSVCR90D.dll) 中定義
1>libcmtd.lib(dbgheap.obj) : error LNK2005: __CrtSetCheckCount 已經在 MSVCRTD.lib(MSVCR90D.dll) 中定義
1>libcmtd.lib(tidtable.obj) : error LNK2005: __encode_pointer 已經在 MSVCRTD.lib(MSVCR90D.dll) 中定義
1>libcmtd.lib(tidtable.obj) : error LNK2005: __decode_pointer 已經在 MSVCRTD.lib(MSVCR90D.dll) 中定義
……
解決辦法是在編譯jsoncpp的lib時,選擇動態執行時庫
具體含義如下
開關 |
對應的庫 |
版本 |
/MD | MSVCPRT.LIB | 多執行緒動態連結的Release版本 |
/MDd | MSVCPRTD.LIB | 多執行緒動態連結的Debug版本 |
/MT | LIBCPMT.LIB | 多執行緒靜態連結的Release版本 |
/MTd | LIBCPMTD.LIB | 多執行緒靜態連結的Debug版本 |
最後還有個4098的warning,直接遮蔽掉!
-------------------------------------------------------------------------
呼叫
目前問題還很多,如果使用/MD編譯,則編譯lib通過,在VC6工程會出現error LNK2005錯誤;如果使用/MTd編譯通過,但在VC6工程中呼叫Parse出現問題。
最終我還是直接把.h和.cpp檔案加到工程裡面來實現,沒有太多時間去研究這個lib怎麼會報錯~