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 时,选择动态运行时库