如何在Windows系统上安装protobuf?(Win7x64/MinGW)

3

C++-Protobuf在VS2012上无法编译。现在我想在Windows上使用MinGW进行编译。请问有没有人可以简要告诉我如何在Win7 x64上编译protobuf? 我已经使用GUI安装程序安装了MinGW。Google提醒我应该参考Unix安装说明,但是我不知道如何在Windows上使用自动工具。

编辑

好的,这是我到目前为止所做的:

$ mount C:/ WinDir
$ cd ./[...]/protobuf.2.4.1
$ ./configure
$ minGW32-make.exe
$ minGW32-make.exe check

minGW32-make.exe没有出现错误,但是没有运行任何测试,并且我找不到libprotobuf.lib。有一些libprotobuf.dll,但我需要这个lib,不是吗?

3个回答

2
你应该在MinGW安装中拥有一个MSys控制台。这个控制台提供了一个类似于Linux的环境,你可以在其中正常使用autotools。
如果没有安装MSys,你可以从MinGW网站获取它。
进入你的源代码目录并尝试以下命令:cd
$ ./configure
$ make

一些库在Windows上可能会出现问题,但大多数都可以通过MinGW和MSys编译。如果遇到具体问题,请回来添加更多信息到您的问题中。

编辑:

minGW32-make.exe 没有错误,但没有运行任何测试,我找不到 libprotobuf.lib。有一些 libprotobuf.dll 但我需要这个 lib,对吗?

通常对于动态库,您会得到 protobuf.dll(动态库)和 libprotobuf.a(静态包装库)。

在链接时,只需将 -lprotobuf 传递给链接器 - 它将查找 libprotobuf.aprotobuf.lib

.lib 是另一种静态库格式,部分由MinGW处理但不是本地格式。)


这不就是原帖作者所做的吗? - Marcus Riemer
可能是这种情况,在他编辑帖子之前我无法知道 - Kos
糟糕,原帖在你发表后被编辑了。对此我感到抱歉!显然,投票已经被锁定,所以如果你对它进行了微小的更改,我当然会重新考虑我的负评! - Marcus Riemer

1

+1 作为一个好的参考。但我认为“直接链接DLL”将会静态链接,而不是动态链接,这是正确的吗?如果我没记错,对于动态链接,你要么手动加载库,要么使用一个静态包装器来代替 - 这就是与DLL一起生成的libNAME.a包装器在幕后所做的事情。 - Kos
我不确定是否可以通过将DLL传递给链接器并使用某些标志自动生成加载程序代码,您能确认一下吗? - Kos
这取决于他的链接方式。我按照维基中提到的方法进行,通过调用 g++ -o example_exe.exe example_exe.o example_dll.dll 来完成,这不需要任何输入库。 - Marcus Riemer
是的,看起来它可以工作。感谢您指出这一点。我想知道在这种方式下支持哪些DLL(比如,它们也可以是来自MSVC的C DLL吗?)。 - Kos
不,这只能与由MinGW工具链创建的DLL一起使用。这是在*NIX系统上链接库(在这种情况下为.so)的“正常”方式,而MinGW在Windows上也采用了这种方式。 - Marcus Riemer

-1

我可以同时获取dll和lib文件。这是当您不想要静态库文件,而想要使用dll和lib文件时的情况。 您需要在Protobuf代码中进行以下更改:

  1. 在VS中打开项目。或任何其他编辑器。我使用VS2015。
  2. 在libProtoBuf项目设置中,在C/C++预处理器中添加以下标志。 PROTOBUF_USE_DLLS; LIBPROTOBUF_EXPORTS; 这些标志将使用dllexport导出来自profobuf的信息

  3. 在您使用Protobuf的客户端代码中,定义:PROTOBUF_USE_DLLS。这将使protobuf包含使用dllimport。

完成第2步后,您将在输出文件夹中看到dll和lib文件。否则,您将始终只看到dll文件而不是lib文件。

希望这有所帮助。如果没有,请在此处写一条消息,我可以帮助您解决此问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接