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

后端 未结 3 977
醉酒成梦
醉酒成梦 2020-11-30 06:06

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 protobu

相关标签:
3条回答
  • 2020-11-30 06:26

    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.

    0 讨论(0)
  • 2020-11-30 06:37

    Here's what worked for me:

    1. 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).

    2. Once you have installed MSYS, you should have a shortcut in your start menu, named "MinGW Shell". That opens a console with a bash.

    3. 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\<username>". You can tell your MSYS username from the shell prompt. When done, you should have a directory "D:\prog\MinGW\msys\1.0\home\<username>\protobuf-2.4.1".

    4. At the shell prompt, change to the protobuf directory:

      cd protobuf-2.4.1

    5. 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...)

    6. Run make:

      make

    7. Install:

      make install

    8. 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 <google/protobuf/message.h> 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:

    1. 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 <Mingw home>\msys\1.0 which brings up a console with a bash. Create a shortcut to that batch file somewhere.

    2. 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 <Mingw home>\msys\1.0\postinstall\pi.bat

    3. 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

    0 讨论(0)
  • 2020-11-30 06:41

    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.

    0 讨论(0)
提交回复
热议问题