【问题标题】:Compile Protocol Buffers 2.6.1 using VS 2015?使用 VS 2015 编译协议缓冲区 2.6.1?
【发布时间】:2017-03-30 19:43:27
【问题描述】:

我想将 ProtoBuf 2.6.1 与 VS 2015 C++ 应用程序一起使用。但是,我无法链接使用 VS 2013 编译的 libprotobuf.lib。我尝试使用 VS 2015 再次编译 libprotobuf.lib,但遇到编译错误,抱怨关于 <hash_map><hash_set> 被弃用。

看起来 GitHub 存储库中的 ProtoBuf 的 cmake 文件现在都为 ProtoBuf 3.0 设置了。还是可以用VS 2015编译libprotobuf吗?

【问题讨论】:

  • this 有帮助吗?
  • 定义 _SILENCE_STDEXT_HASH_DEPRECATION_WARNINGS 编译。但是,我最终从 GitHub 获取了最新的 hash.h 文件,该文件增加了对较新的 MSVC 编译器的支持。

标签: c++ protocol-buffers visual-studio-2015


【解决方案1】:

不幸的是,cmake build 从 protobuf v3.0.0-alpha 开始可用。

我已经使用以下非官方 cmake scripts 成功构建了带有 MSVC 2015 的 protobuf v2.6.1。您需要来自该存储库的分支 updated_for_v2.6.1。

对于该克隆两个存储库 - protobufprotobuf-cmake

protobuf 克隆中的签出标签 v2.6.1 和 protobuf-cmake 中的分支 origin/updated_for_v2.6.1

cmake -DPROTOBUF_ROOT= -G"Visual Studio 14 2015" -DCMAKE_INSTALL_PREFIX=

然后像往常一样从打开的解决方案或使用“cmake --build”构建它。命令

HTH。

【讨论】:

  • 我今天在 powershell 中使用 cmake 3.18.1 进行了尝试,并对其进行了一些更改:1. 不再有分支 updated_for_2.6.1,应该使用 master 分支 2. 我需要在作为 cmake 的参数给出的路径周围添加双引号
【解决方案2】:

要让单元测试运行,您还需要修改一些测试,这些测试将字符串与中间的预处理器宏连接起来。只需在宏的任一侧添加一个空格,编译器解析器就可以再次处理。

在创建临时文件名时,由于目录正斜杠与反斜杠,一些测试在运行时失败,但这些并不重要。

否则没有问题。 PS 我实际上无法检查,但这可能是我使用 v3 alpha 而不是 261 的经验,因为我是凭记忆这样做的。

两者都在 RC 上构建良好,我认为自 2015 年 prof RTM 以来我们的 Jenkins 工作已经重建它们

【讨论】:

    【解决方案3】:

    您可以参考build error with Visual Studio 2015 #314

    感谢您的报告,但我们目前不支持 Visual Studio 2015。在我们正式切换到 Visual Studio 2015 之前,请改用 Visual Studio 2013。

    请注意,我们确实有切换到 Visual Studio 2015 的计划,但目前我想专注于其他高优先级问题。如果您对 Mozc for Windows 中 Visual Studio 2015 支持的进展感兴趣,请订阅 #315。

    也就是说,仅仅修复构建失败并不是那么困难。我已将概念验证更改 518f41a 上传到 support_msvs_2015 分支供您参考。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-09
      • 2014-05-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-11
      相关资源
      最近更新 更多