VS 2012 下编译 jsonCpp 出错

小驴 2013-04-25 03:55:16
我是按照网上的流程做的 请看链接 http://www.cnblogs.com/ppboy_dxh/archive/2011/03/03/1970290.html

我选择的是方法2...

1.我在vs2012 建了一个MFC 项目,取名为test2

2.我从网上下载了 jsoncpp 并且 打开 jsoncpp-src-0.5.0\makefiles\vs71目录下的jsoncpp.sln,会出现三个Project:jsontest, lib_json, test_lib_json

3. 在lib_json上 右击-->Properties-->Configuration Properties-->C/C++-->Code Generation, 选择多线程 MTD

4.点击生成 解决方案,然后将生成好的 json_vc71_libmtd.lib 和 include\json 目录下的.h 文件拷贝到工程目录下

5.在test2 工程右击 右击-->Properties-->Configuration Properties-->C/C++-->Code Generation, 选择多线程 MTD

6.在工程名上 右击-->Properties-->Configuration Properties-->Linker-->Input, 在Additional Dependencies里填写json_vc71_libmtd.lib

7.我有一处代码需要用到json 解析
Json::Reader reader;
Json::Value root;
if (!reader.parse(rep, root, false))
{
//return;
}

8.点击 生成 之后,就一直报错

当工程选择的是MTD 时...

:\program files (x86)\vc\atlmfc\include\afxver_.h(81): fatal error C1189: #error : Please use the /MD switch for _AFXDLL builds


当工程选择的是 MD 时

json_vc71_libmtd.lib(json_value.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MTd_StaticDebug”不匹配值“MDd_DynamicDebug”(HttpClient.obj 中)
1>json_vc71_libmtd.lib(json_reader.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MTd_StaticDebug”不匹配值“MDd_DynamicDebug”(HttpClient.obj 中)
1>json_vc71_libmtd.lib(json_writer.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MTd_StaticDebug”不匹配值“MDd_DynamicDebug”(HttpClient.obj 中)
1>msvcprtd.lib(MSVCP110D.dll) : error LNK2005: "public: __thiscall std::_Container_base12::_Container_base12(void)" (??0_Container_base12@std@@QAE@XZ) 已经在 json_vc71_libmtd.lib(json_value.obj) 中定义
1>msvcprtd.lib(MSVCP110D.dll) : error LNK2005: "public: __thiscall std::_Container_base12::~_Container_base12(void)" (??1_Container_base12@std@@QAE@XZ) 已经在 json_vc71_libmtd.lib(json_value.obj) 中定义
1>msvcprtd.lib(MSVCP110D.dll) : error LNK2005: "public: void __thiscall std::_Container_base12::_Orphan_all(void)" (?_Orphan_all@_Container_base12@std@@QAEXXZ) 已经在 json_vc71_libmtd.lib(json_value.obj) 中定义
1>msvcprtd.lib(MSVCP110D.dll) : error LNK2005: "public: __thiscall std::locale::id::id(unsigned int)" (??0id@locale@std@@QAE@I@Z) 已经在 json_vc71_libmtd.lib(json_value.obj) 中定义
1>msvcprtd.lib(MSVCP110D.dll) : error LNK2005: "public: struct std::_Iterator_base12 * * __thiscall std::_Container_base12::_Getpfirst(void)const " (?_Getpfirst@_Container_base12@std@@QBEPAPAU_Iterator_base12@2@XZ) 已经在 json_vc71_libmtd.lib(json_value.obj) 中定义
1>libcpmtd.lib(locale0.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MTd_StaticDebug”不匹配值“MDd_DynamicDebug”(HttpClient.obj 中)
1>libcpmtd.lib(locale0.obj) : error LNK2005: "void __cdecl std::_Facet_Register(class std::_Facet_base *)" (?_Facet_Register@std@@YAXPAV_Facet_base@1@@Z) 已经在 msvcprtd.lib(locale0_implib.obj) 中定义
1>libcpmtd.lib(locale0.obj) : error LNK2005: "private: static class std::locale::_Locimp * __cdecl std::locale::_Getgloballocale(void)" (?_Getgloballocale@locale@std@@CAPAV_Locimp@12@XZ) 已经在 msvcprtd.lib(MSVCP110D.dll) 中定义
1>libcpmtd.lib(locale0.obj) : error LNK2005: "private: static class std::locale::_Locimp * __cdecl std::locale::_Init(bool)" (?_Init@locale@std@@CAPAV_Locimp@12@_N@Z) 已经在 msvcprtd.lib(MSVCP110D.dll) 中定义
1>libcpmtd.lib(locale0.obj) : error LNK2005: "public: static void __cdecl std::_Locinfo::_Locinfo_ctor(class std::_Locinfo *,char const *)" (?_Locinfo_ctor@_Locinfo@std@@SAXPAV12@PBD@Z) 已经在 msvcprtd.lib(MSVCP110D.dll) 中定义
1>libcpmtd.lib(locale0.obj) : error LNK2005: "public: static void __cdecl std::_Locinfo::_Locinfo_dtor(class std::_Locinfo *)" (?_Locinfo_dtor@_Locinfo@std@@SAXPAV12@@Z) 已经在 msvcprtd.lib(MSVCP110D.dll) 中定义
1>libcpmtd.lib(ios.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MTd_StaticDebug”不匹配值“MDd_DynamicDebug”(HttpClient.obj 中)
1>libcpmtd.lib(ios.obj) : error LNK2005: "public: static void __cdecl std::ios_base::_Addstd(class std::ios_base *)" (?_Addstd@ios_base@std@@SAXPAV12@@Z) 已经在 msvcprtd.lib(MSVCP110D.dll) 中定义
1>libcpmtd.lib(ios.obj) : error LNK2005: "private: static void __cdecl std::ios_base::_Ios_base_dtor(class std::ios_base *)" (?_Ios_base_dtor@ios_base@std@@CAXPAV12@@Z) 已经在 msvcprtd.lib(MSVCP110D.dll) 中定义
1>libcpmtd.lib(iosptrs.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MTd_StaticDebug”不匹配值“MDd_DynamicDebug”(HttpClient.obj 中)
1>libcpmtd.lib(locale.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MTd_StaticDebug”不匹配值“MDd_DynamicDebug”(HttpClient.obj 中)
1>libcpmtd.lib(xlock.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MTd_StaticDebug”不匹配值“MDd_DynamicDebug”(HttpClient.obj 中)
1>libcpmtd.lib(xlock.obj) : error LNK2005: "public: __thiscall std::_Lockit::_Lockit(int)" (??0_Lockit@std@@QAE@H@Z) 已经在 msvcprtd.lib(MSVCP110D.dll) 中定义
1>libcpmtd.lib(xlock.obj) : error LNK2005: "public: __thiscall std::_Lockit::~_Lockit(void)" (??1_Lockit@std@@QAE@XZ) 已经在 msvcprtd.lib(MSVCP110D.dll) 中定义
1>libcpmtd.lib(xthrow.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MTd_StaticDebug”不匹配值“MDd_DynamicDebug”(HttpClient.obj 中)
1>libcpmtd.lib(xthrow.obj) : error LNK2005: "void __cdecl std::_Xbad_alloc(void)" (?_Xbad_alloc@std@@YAXXZ) 已经在 msvcprtd.lib(MSVCP110D.dll) 中定义
1>libcpmtd.lib(xthrow.obj) : error LNK2005: "void __cdecl std::_Xlength_error(char const *)" (?_Xlength_error@std@@YAXPBD@Z) 已经在 msvcprtd.lib(MSVCP110D.dll) 中定义
1>libcpmtd.lib(xthrow.obj) : error LNK2005: "void __cdecl std::_Xout_of_range(char const *)" (?_Xout_of_range@std@@YAXPBD@Z) 已经在 msvcprtd.lib(MSVCP110D.dll) 中定义
1>libcpmtd.lib(wlocale.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MTd_StaticDebug”不匹配值“MDd_DynamicDebug”(HttpClient.obj 中)
1>libcpmtd.lib(xlocale.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MTd_StaticDebug”不匹配值“MDd_DynamicDebug”(HttpClient.obj 中)
1>libcpmtd.lib(xdateord.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MTd_StaticDebug”不匹配值“MDd_DynamicDebug”(HttpClient.obj 中)
1>libcpmtd.lib(xwctomb.obj) : error LNK2005: __Getcvt 已经在 msvcprtd.lib(MSVCP110D.dll) 中定义
1>LIBCMTD.lib(dbgheap.obj) : error LNK2005: __CrtSetCheckCount 已经在 msvcrtd.lib(MSVCR110D.dll) 中定义
1>LIBCMTD.lib(dbgheap.obj) : error LNK2005: __calloc_dbg 已经在 msvcrtd.lib(MSVCR110D.dll) 中定义
1>LIBCMTD.lib(dbgheap.obj) : error LNK2005: __free_dbg 已经在 msvcrtd.lib(MSVCR110D.dll) 中定义
1>LIBCMTD.lib(dbgheap.obj) : error LNK2005: __recalloc 已经在 MSVCRT.lib(MSVCR110.dll) 中定义
1>LIBCMTD.lib(stdexcpt.obj) : error LNK2005: "public: __thiscall std::bad_cast::bad_cast(class std::bad_cast const &)" (??0bad_cast@std@@QAE@ABV01@@Z) 已经在 msvcrtd.lib(MSVCR110D.dll) 中定义
.
.
.
.
1>LINK : warning LNK4098: 默认库“LIBCMTD”与其他库的使用冲突;请使用 /NODEFAULTLIB:library
1>D:\tbanana\Test2\Debug\Test2.exe : fatal error LNK1169: 找到一个或多个多重定义的符号
========== 全部重新生成: 成功 0 个,失败 1 个,跳过 0 个 ==========


--------------------- 反正是各种错 不管选择哪种-----------------



然后很无奈的是 MFC 没有自带的json解析器。所以我想知道的是


1.以上的错误如何解决?

2.有么有json解析算法?


...全文
3396 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
c562731235 2015-09-22
  • 打赏
  • 举报
回复
引用 7 楼 shenyulv 的回复:
[quote=引用 6 楼 wumn29 的回复:] 1、使用这个lib的工程采用 动态链接到MFC, 代码生成选项使用MD, lib里面代码生成选项也是MD 2、使用lib的工程采用 静态链接到MFC, 代码生成使用MT, lib也用MT 这两种均可编译通过, 试试
这两种还么有试过,我试试[/quote] 您确定可以 ??骗子,。。。。。
Geniusjcm 2013-11-21
  • 打赏
  • 举报
回复
那两种方法我的还是不行
Clengyue 2013-11-03
  • 打赏
  • 举报
回复
太感谢了,谢谢
佑佑_佑佑 2013-05-28
  • 打赏
  • 举报
回复
请问“lib里面代码生成选项也是MD” lib里面代码生成选项在哪里呢? 我在属性->连接器中没有找到这个选项 谢谢!
  • 打赏
  • 举报
回复
引用 6 楼 wumn29 的回复:
1、使用这个lib的工程采用 动态链接到MFC, 代码生成选项使用MD, lib里面代码生成选项也是MD 2、使用lib的工程采用 静态链接到MFC, 代码生成使用MT, lib也用MT 这两种均可编译通过, 试试
试过了,可以通过。 感谢
小驴 2013-05-01
  • 打赏
  • 举报
回复
引用 6 楼 wumn29 的回复:
1、使用这个lib的工程采用 动态链接到MFC, 代码生成选项使用MD, lib里面代码生成选项也是MD 2、使用lib的工程采用 静态链接到MFC, 代码生成使用MT, lib也用MT 这两种均可编译通过, 试试
这两种还么有试过,我试试
小驴 2013-04-27
  • 打赏
  • 举报
回复
引用 4 楼 aj3423 的回复:
bom头就是utf-8格式的前3个字节?跳过3字节即可?
嗯,已经解决了,我就是用字符串截取掉前面三个字节,但是如果有时候前面没有那三个字节我又截取了就乱码了,所以我是想知道如何判断前面三个自己是bom的头
wumn29 2013-04-27
  • 打赏
  • 举报
回复
1、使用这个lib的工程采用 动态链接到MFC, 代码生成选项使用MD, lib里面代码生成选项也是MD 2、使用lib的工程采用 静态链接到MFC, 代码生成使用MT, lib也用MT 这两种均可编译通过, 试试
aj3423 2013-04-25
  • 打赏
  • 举报
回复
bom头就是utf-8格式的前3个字节?跳过3字节即可?
小驴 2013-04-25
  • 打赏
  • 举报
回复
引用 1 楼 aj3423 的回复:
没用过jsoncpp,但这种已定义不匹配的错误就是因为 所用的lib和当前exe不匹配,就是/MTd 那个问题,确保jsoncpp.lib和test.exe用的是相同的选项,然后可以4种都试一下:/MT, /MTd, /MD, /MDd
顺便问你下 ... 我从服务器 post 到的数据 是一个json格式,但是前面有个BOM 头,我要怎么去掉...
小驴 2013-04-25
  • 打赏
  • 举报
回复
引用 1 楼 aj3423 的回复:
没用过jsoncpp,但这种已定义不匹配的错误就是因为 所用的lib和当前exe不匹配,就是/MTd 那个问题,确保jsoncpp.lib和test.exe用的是相同的选项,然后可以4种都试一下:/MT, /MTd, /MD, /MDd
都试过了,各种错... 现在我只能用最笨的办法了,把所有的文件导进去,然后手工将路径修改下...唉...
aj3423 2013-04-25
  • 打赏
  • 举报
回复
没用过jsoncpp,但这种已定义不匹配的错误就是因为 所用的lib和当前exe不匹配,就是/MTd 那个问题,确保jsoncpp.lib和test.exe用的是相同的选项,然后可以4种都试一下:/MT, /MTd, /MD, /MDd

15,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧