可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
I'm using Codeblocks as my IDE with MingGW. I'm trying to use google protocol buffers, but I'm having trouble building the protobuf.
The readme file for protobuf says:
If you are using Cygwin or MinGW, follow the Unix installation instructions, above.
The Unix instructions says:
To build and install the C++ Protocol Buffer runtime and the Protocol Buffer compiler (protoc) execute the following: $ ./configure $ make $ make check $ make install
I don't know how to perform these in Windows because "configure" is a Unix script and I don't know how to execute it, or the rest of the commands.
Can someone explain in more detail how I can build protobuf using MinGW on Windows?
回答1:
Here's what worked for me:
You need to install MSYS with mingw. This is a minimal unix-like shell environment that lets you configure/make most unix packages. Read the mingw docs on how to install that (either with mingw-get or the GUI installer).
Once you have installed MSYS, you should have a shortcut in your start menu, named "MinGW Shell". That opens a console with a bash.
Extract the source tarball to your MSYS home directory. I have mingw installed in "D:\prog", so the directory was "D:\prog\MinGW\msys\1.0\home\". You can tell your MSYS username from the shell prompt. When done, you should have a directory "D:\prog\MinGW\msys\1.0\home\\protobuf-2.4.1".
At the shell prompt, change to the protobuf directory:
cd protobuf-2.4.1
Run the configure script (note the backquotes):
./configure --prefix=`cd /mingw; pwd -W`
The --prefix
paramater makes sure protobuf is installed in the mingw directory tree instead of the MSYS directories, so you can build outside the MSYS shell (e.g. with CodeBlocks...)
Run make:
make
Install:
make install
That's it. You should now be able to compile your project with protobuf.
You should be able to:
- call
protoc
from your project/makefiles #include
etc. - link with
-lprotobuf
or -lprotobuf-lite
HTH
Peter
Edit: Bringing this a bit more up to date. I tried setting up a new PC with current versions of MinGW and protobuf 2.5.0, and these are the problems I had:
There is no "MinGW Shell" shortcut in the start menu.
For some reason current MinGW installations fail to install that.
But there is a msys.bat
in \msys\1.0
which brings up a console with a bash. Create a shortcut to that batch file somewhere.
gcc does not work from the MSYS shell.
I had to run a post-installation batch file manually and answer the questions there. This sets up fstab entries that mount the mingw directories in the MSYS environment.
You need to run \msys\1.0\postinstall\pi.bat
My Avira antivirus interfered with the protobuf compilation.
It complained about the generated protoc.exe being a "TR/Crypt.XPACK.Gen" trojan and blocked acces to that file, resulting in a corrupted build.
I got error messages saying something like protoc:./.libs/lt-protoc.c:233: FATAL: couldn't find protoc.
when trying to start protoc.
I had to disable the Avira realtime scanner and make clean && make && make install
again
Edit #2:
This post has aged quite a bit, and mingw does not equal mingw anymore. In this day and age, I would rather recommend MSYS2 which comes with a port of ArchLinux's pacman package manager, a recent, better-working (c++11 std::thread support!) mingw fork for both 32 and 64 bit, and a protobuf package that you just need to install and be good.
Go here to download!
Hope this helps!
Peter
回答2:
In my case Peter's answer did not work completely, I used the latest MinGW 4.8.1 + the MSys distribution (selected both MSys packages in mingw-get
).
My problem was that the prefix didn't really work, I could only find the files in C:\MinGW\msys\1.0\local
. However, after copying the bin / include / libs folders to c:\mingw,
the installation worked for me, too.
回答3:
I had the same problem and i solved it by building protocol buffers using boost build. That worked fine, I can provide a jamfile for protocol buffers.
What I still have problems with though is to extend boost build so it generates cpp source files from proto files, but that is another story.