我正在使用Codeblocks作为我的MingGW IDE。 我正在尝试使用谷歌协议缓冲区, 但是我在构建protobuf时遇到了麻烦。
protobuf的自述文件说:
如果您使用的是Cygwin或MinGW, 按照上面的Unix安装说明进行操作。
Unix指令说:
构建和安装C ++协议缓冲区运行时和协议 缓冲区编译器(protoc)执行以下操作:
$ ./configure $ make $ make check $ make install
我不知道如何在Windows中执行这些操作 因为“configure”是一个Unix脚本而且 我不知道如何执行它,或其他命令。
有人可以更详细地解释如何 我可以在Windows上使用MinGW构建protobuf吗?
答案 0 :(得分:25)
这对我有用:
您需要使用mingw安装MSYS。这是一个类似于unix的最小shell环境,允许您配置/生成大多数unix包。阅读mingw文档,了解如何安装(使用mingw-get或GUI安装程序)。
安装完MSYS后,您应该在开始菜单中有一个名为“MinGW Shell”的快捷方式。这会打开一个带有bash的控制台。
将源tarball解压缩到MSYS主目录。我在“D:\ prog”中安装了mingw,因此目录是“D:\ prog \ MinGW \ msys \ 1.0 \ home \< username>”。您可以从shell提示符中告诉您的MSYS用户名。完成后,您应该有一个目录“D:\ prog \ MinGW \ msys \ 1.0 \ home \< username> \ protobuf-2.4.1”。
在shell提示符下,切换到protobuf目录:
cd protobuf-2.4.1
运行configure脚本(注意反引号):
./configure --prefix=`cd /mingw; pwd -W`
--prefix
参数确保protobuf安装在mingw目录树而不是MSYS目录中,因此您可以在MSYS shell外部构建(例如使用CodeBlocks ...)
运行make:
make
安装:
make install
就是这样。您现在应该能够使用protobuf编译您的项目 你应该能够:
protoc
#include <google/protobuf/message.h>
等。-lprotobuf
或-lprotobuf-lite
HTH
彼得
编辑: 让这更新一点。我尝试使用当前版本的MinGW和protobuf 2.5.0设置一台新PC,这些都是我遇到的问题:
开始菜单中没有“MinGW Shell”快捷方式
由于某些原因,目前的MinGW安装无法安装
但是msys.bat
中有<Mingw home>\msys\1.0
,它会带来一个带bash的控制台。在某处创建该批处理文件的快捷方式。
gcc在MSYS shell中不起作用
我必须手动运行安装后的批处理文件并回答那里的问题。这将设置在MSYS环境中挂载mingw目录的fstab条目
您需要运行<Mingw home>\msys\1.0\postinstall\pi.bat
我的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 support!)mingw fork for 32和64 bit,and一个protobuf包,你只需要安装并保持良好状态。
Go here下载!
希望这有帮助!
彼得
答案 1 :(得分:1)
在我的情况下,Peter的答案没有完全奏效,我使用了最新的MinGW 4.8.1 + MSys发行版(在mingw-get
中选择了两个MSys包)。
我的问题是前缀不起作用,我只能找到C:\MinGW\msys\1.0\local
中的文件。但是,将bin / include / libs文件夹复制到c:\mingw,
后,安装也适用于我。
答案 2 :(得分:0)
我遇到了同样的问题,我通过使用boost build构建协议缓冲区来解决它。 这很好,我可以为协议缓冲区提供一个jamfile。
我仍然遇到的问题是扩展boost构建,以便从proto文件生成cpp源文件,但这是另一个故事。