【问题标题】:How to build Google's protobuf in Windows using MinGW?如何使用 MinGW 在 Windows 中构建 Google 的 protobuf?
【发布时间】:2012-03-03 20:51:09
【问题描述】:

我在 MingGW 中使用 Codeblocks 作为我的 IDE。 我正在尝试使用谷歌协议缓冲区, 但我在构建 protobuf 时遇到了问题。

protobuf 的自述文件说:

如果您使用的是 Cygwin 或 MinGW, 按照上面的 Unix 安装说明进行操作。

Unix 指令说:

构建和安装 C++ 协议缓冲区运行时和协议 缓冲区编译器(protoc)执行如下: $ ./configure $ make $ make check $ make install

我不知道如何在 Windows 中执行这些操作 因为“配置”是一个 Unix 脚本并且 我不知道如何执行它,或者其余的命令。

谁能更详细地解释一下 我可以在 Windows 上使用 MinGW 构建 protobuf 吗?

【问题讨论】:

    标签: c++ mingw protocol-buffers


    【解决方案1】:

    这对我有用:

    1. 您需要使用 mingw 安装 MSYS。这是一个最小的类 unix shell 环境,可让您配置/制作大多数 unix 包。阅读 mingw 文档,了解如何安装(使用 mingw-get 或 GUI 安装程序)。

    2. 安装 MSYS 后,您应该在开始菜单中有一个快捷方式,名为“MinGW Shell”。这会打开一个带有 bash 的控制台。

    3. 将源 tarball 解压缩到 MSYS 主目录。我在“D:\prog”中安装了mingw,所以目录是“D:\prog\MinGW\msys\1.0\home\”。您可以从 shell 提示符中告知您的 MSYS 用户名。完成后,您应该有一个目录“D:\prog\MinGW\msys\1.0\home\\protobuf-2.4.1”。

    4. 在 shell 提示符下,切换到 protobuf 目录:

      cd protobuf-2.4.1

    5. 运行配置脚本(注意反引号):

      ./configure --prefix=`cd /mingw; pwd -W`

      --prefix 参数确保 protobuf 安装在 mingw 目录树而不是 MSYS 目录中,因此您可以在 MSYS shell 之外构建(例如,使用 CodeBlocks...)

    6. 运行make:

      make

    7. 安装:

      make install

    8. 就是这样。您现在应该可以使用 protobuf 编译您的项目了。
      您应该能够:

      • 从您的项目/makefile 中调用 protoc
      • #include <google/protobuf/message.h>
      • -lprotobuf-lprotobuf-lite 链接

    HTH
    彼得

    编辑: 使这更加最新。我尝试使用当前版本的 MinGW 和 protobuf 2.5.0 设置新 PC,这些是我遇到的问题:

    1. 开始菜单中没有“MinGW Shell”快捷方式。
      由于某种原因,当前的 MinGW 安装无法安装。
      但是<Mingw home>\msys\1.0 中有一个msys.bat,它会打开一个带有bash 的控制台。在某处创建该批处理文件的快捷方式。

    2. gcc 在 MSYS shell 中不起作用。
      我不得不手动运行一个安装后的批处理文件并在那里回答问题。这会设置在 MSYS 环境中挂载 mingw 目录的 fstab 条目。
      你需要运行<Mingw home>\msys\1.0\postinstall\pi.bat

    3. 我的 Avira 防病毒软件干扰了 protobuf 编译。
      它抱怨生成的 protoc.exe 是“TR/Crypt.XPACK.Gen”木马并阻止对该文件的访问,从而导致构建损坏。
      我在尝试启动 protoc 时收到类似 protoc:./.libs/lt-protoc.c:233: FATAL: couldn't find protoc. 的错误消息。
      我不得不再次禁用 Avira 实时扫描程序和 make clean && make && make install

    编辑#2:

    这篇文章已经过时了,mingw 不再等于 mingw。 在这个时代,我宁愿推荐 MSYS2,它带有 ArchLinux 的 pacman 包管理器的一个端口,一个最近的、工作更好的(c++11 std::thread 支持!)mingw fork,用于 32 位和 64 位,以及一个 protobuf 包,您只需要安装它就可以了。

    Go here 下载!

    希望这会有所帮助!
    彼得

    【讨论】:

    • 感谢您的回答:) 我会试一试的。
    • 好的,我做到了,它奏效了:),所以非常感谢这个答案。
    • @Peter:我尝试按照您列出的步骤进行操作。当我运行“./configure”命令时,出现以下错误:检查如何运行 C++ 预处理器...在 make 中,make install 命令工作。例如: make: *** 没有指定目标,也没有找到 makefile。停止。
    • 使用 MinGW 我遇到了这个问题: tar: "Archive value 84224 is out of uid_t range 0..65535" 事实证明 cygwin 支持更大的 uid。如果您看到此问题,请安装 cygwin 并重复上述说明。
    • 哇。永远不要从 Linux 回到 Windows。 Windows 真是一团糟。
    【解决方案2】:

    在我的情况下,彼得的回答并没有完全奏效,我使用了最新的 MinGW 4.8.1 + MSys 发行版(在 mingw-get 中选择了两个 MSys 包)。

    我的问题是前缀并没有真正起作用,我只能在 C:\MinGW\msys\1.0\local 中找到文件。但是,将 bin / include / libs 文件夹复制到 c:\mingw, 后,安装也对我有用。

    【讨论】:

      【解决方案3】:

      我遇到了同样的问题,我通过使用 boost build 构建协议缓冲区来解决它。 效果很好,我可以为协议缓冲区提供一个 jamfile。

      我仍然遇到的问题是扩展 boost 构建,以便它从 proto 文件生成 cpp 源文件,但这是另一回事。

      【讨论】:

      • 当前版本的 protobuf 源代码分发版 (3.0.0-beta2) 没有 ./configure 脚本,autoconf 失败;有更新答案的机会吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-11
      • 1970-01-01
      • 2013-06-13
      • 2012-01-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多