1. 程式人生 > >JSONCpp在windows下的VC6編譯和呼叫

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怎麼會報錯~