VC 下 jsoncpp 的使用入门
一、摘要
JSON 的全称为:JavaScript Object Notation,顾名思义,JSON 是用于标记 Javascript 对象
的,JSON 官方的解释为:JSON 是一种轻量级的数据传输格式。
本文并不详细介绍 JSON 本身的细节,旨在讨论如何使用 C++ 语言来处理 JSON。关于
JSON 更具体的信息,可参见 JSON 官网:http://www.json.org。
二、jsoncpp 在 Windows 下的编译
要使用第三方源码库,第一步少不了的就是编译,将源码文件编译成我们方便使用的动态
链接库、静态链接库或者静态导入库[1]。
jsconcpp 进行 JSON 解析的源码文件分布在 include/json、src/lib_json 下。其实 jsoncpp 源码
并不多,为了方便产品管理,此处没必要将其编译为动态链接库或者静态导入库,所以我
们选择使用静态链接库[2]。
jsoncpp 已经处理的很完善了,所有编译选项都已经配置好,打开 makefiles/vs71/jsoncpp.sln
便可以开始编译(默认是使用 VS2003 编译器的,打开时直接按照 VS2005 提示转换即
可)。
三、静态链接库的使用
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 时,选择动态运行时库