如何使用MinGW在Windows中构建Google的protobuf?

How to build Google's protobuf in Windows using MinGW?

本文关键字:Google protobuf 构建 何使用 MinGW Windows      更新时间:2023-10-16

我使用Codeblocks作为MingGW的IDE。我正在尝试使用谷歌协议缓冲区,但我在建造原型时遇到了麻烦。

protobuf的自述文件说:

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

Unix指令说:

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

我不知道如何在Windows中执行这些操作因为"configure"是Unix脚本我不知道如何执行它,也不知道其他命令。

有人能更详细地解释一下如何我可以在Windows上使用MinGW构建protobuf?

以下是对我有效的方法:

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

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

  3. 将源tarball提取到您的MSYS主目录中。我在"D:\prog"中安装了mingw,所以目录是"D:\pog\mingw\msys \1.0\home\<username>"。你可以从shell提示符中说出你的msys用户名。完成后,您应该有一个目录"D:\prog\MinGW\msys\1.0\home\<username>\protobuf-2.4.1"。

  4. 在shell提示下,更改到protobuf目录:

    cd protobuf-2.4.1

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

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

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

  6. 运行制造商:

    make

  7. 安装:

    make install

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

    • 从项目/makefiles调用protoc
    • CCD_ 8等
    • -lprotobuf-lprotobuf-lite链接

HTH
Peter

编辑:让这个更新一点。我试着用当前版本的MinGW和protobuf 2.5.0建立一台新的PC,这些都是我遇到的问题:

  1. 在开始菜单中没有"MinGW Shell"快捷方式
    由于某些原因,目前的MinGW安装无法安装
    但是在<Mingw home>msys1.0中有一个msys.bat,它带来了一个带有bash的控制台。在某个位置创建该批处理文件的快捷方式。

  2. gcc不能在MSYS shell中工作
    我必须手动运行安装后的批处理文件,并在那里回答问题。这将设置在MSYS环境中装载mingw目录的fstab条目
    您需要运行<Mingw home>msys1.0postinstallpi.bat

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

编辑#2:

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

请点击此处下载!

希望这能有所帮助
Peter

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

我的问题是前缀实际上不起作用,我只能在C:MinGWmsys1.0local中找到文件。然而,在将bin/include/libs文件夹复制到c:mingw,之后,安装也对我起到了作用。

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

不过,我仍然有问题的是扩展boost构建,使其从proto文件生成cpp源文件,但这是另一回事。

最新答案

以下是protobuf源代码发行版的当前版本的答案,即在Windows中使用protobuf for C++语言。(我的protobuf版本是21.4-libprotoc 3.21.4

参考@peter remmers 的回答

步骤0:从发布页面下载protobuf zip文件。例如";protobuf-cpp-3.21.4.zip";

  • 将其提取到要安装protobuf的路径
  • 将";src";系统环境路径变量的文件夹路径。例如";C: \Protobuf路径\Protobuf-321.4\src"

步骤1:下载&安装msys2:https://www.msys2.org/

确保做到这些:

  • pacman -Syu
  • 运行";MSYS2 MSYS";从"开始"菜单。使用pacman -Syu更新其余基本包
  • pacman -S --needed base-devel mingw-w64-x86_64-toolchain

步骤2:将mingw-bin文件的路径添加到系统的环境变量。

  • 例如它是";C: \Path-To-Msys2\Msys2\mingw64\bin";以及";C: \Path-To-Msys2\Msys2\usr\bin"
  • 通过检查终端中的g++版本:g++ --version进行确认(例如Mine是12.1.0)

步骤3:使用protobuf库设置C++运行时:

  • 因此,返回msys2中的,安装protobuf的库:pacman -S mingw-w64-x86_64-protobuf。参考
  • 现在,将目录更改为系统中安装protobuf的路径:例如cd"C: \Protobuf的路径\Protobuf-321.4"
  • 运行protobuf:./configure的配置文件
  • 运行make(如果aclocal等出现任何错误,请尝试运行pacman -S autoconf,然后重试make
  • 运行make install

第4步:就是这样。您现在应该能够使用protobuf编译您的项目了。

例如,使用protoc到cpp代码编译.proto文件&头文件:

  • 用途:protoc --cpp_out=$OUTDIR example.proto
  • 两个文件,一个pb.cc&将生成CCD_ 31文件
  • 编写一个cpp代码来使用该头文件并创建对象、填充数据等
  • 从终端/PowerShell编译该cpp编写器文件,如下所示:

g++ -I "C:Path-To-Protobufprotobuf-3.21.4src" "Path-To-Codewriter.cpp" "Path-To-Codeexample.pb.cc" -o "Path-To-Codewriter.exe" -L "C:Path-To-Protobufprotobuf-3.21.4src.libs" -lprotobuf -pthread

(我想"-phread"在最后并不是很重要。)

注意(我遇到的问题):系统环境变量列表中例如mingw的路径顺序非常重要。