如何用 /clr 编译 jsoncpp?

Posted

技术标签:

【中文标题】如何用 /clr 编译 jsoncpp?【英文标题】:how to compiling jsoncpp with /clr? 【发布时间】:2015-01-16 14:56:48 【问题描述】:

我最近在我的 mfc 项目中使用了 jsoncpp,它工作正常。但是当我尝试使用 /clr 编译项目时,我得到下面的链接器错误:

1>lib_json.lib(json_writer.obj):错误 LNK2038:检测到“RuntimeLibrary”不匹配:值“MT_StaticRelease”与 Brusher.obj 中的值“MD_DynamicRelease”不匹配

1>lib_json.lib(json_value.obj):错误 LNK2038:检测到“RuntimeLibrary”不匹配:值“MT_StaticRelease”与 Brusher.obj 中的值“MD_DynamicRelease”不匹配

1>lib_json.lib(json_reader.obj):错误 LNK2038:检测到“RuntimeLibrary”不匹配:值“MT_StaticRelease”与 Brusher.obj 中的值“MD_DynamicRelease”不匹配

1>lib_json.lib(json_writer.obj) : error LNK2001: unresolved external symbol "__int64 const std::_BADOFF" (?_BADOFF@std@@3_JB)

1>lib_json.lib(json_writer.obj) : 错误 LNK2001: 无法解析的外部符号 "public: static class std::locale::id std::ctype::id" (?id@?$ctype@D@ std@@2V0locale@2@A)

1>lib_json.lib(json_writer.obj) : 错误 LNK2001: 无法解析的外部符号 "private: static int std::locale::id::_Id_cnt" (?_Id_cnt@id@locale@std@@0HA)

我该如何解决这个问题?

【问题讨论】:

您无法链接使用 /MT 构建的静态库。您必须使用 /MD 重建库,这是对 C++/CLI 的严格要求。 谢谢@HansPassant,我已经用 /MD 重建了 jsoncpp 库及其工作......我意识到这显然是一个愚蠢的问题...... 再次感谢老兄,谢谢你帮我解决了这个问题。但我发现有多少人会在 C++ 中使用托管代码?在什么样的情况下? 【参考方案1】:

我不知道如何将评论标记为答案,这是@Hans Passant 的答案:

您无法链接使用 /MT 构建的静态库。您必须使用 /MD 重建库,这是对 C++/CLI 的严格要求。 – Hans Passant 11 小时前

我所做的是用 /MD 重建 jsoncpp 库及其工作。

【讨论】:

以上是关于如何用 /clr 编译 jsoncpp?的主要内容,如果未能解决你的问题,请参考以下文章

cmake源码编译安装jsoncpp

详细地jsoncpp编译方法 和 vs2010中导入第三方库的方法

jsoncpp linux平台编译和arm移植

详解将jsoncpp编译so库,进行封装和解析JSON数据

Windows下用CMake编译JsonCpp及配置(适合新手)

如何用C# .NEt开发基于http的接口,只支持post方式传参,除webservice以外,谁能给个例子,万分感谢!