【问题标题】:How to install protobuf on windows? (Win7x64/MinGW)如何在 Windows 上安装 protobuf? (Win7x64/MinGW)
【发布时间】:2012-11-28 23:48:00
【问题描述】:

C++-Protobuf 在 VS2012 中无法编译。现在我想用MinGW在windows上编译它。有人可以给我一些关于如何在 Win7 x64 上编译 protobuf 的简短标题。我已经使用 GUI 安装程序安装了 MinGW。谷歌在 MinGW 设置通知中写道,我应该参考 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 但我需要这个库,不是吗?

【问题讨论】:

    标签: c++ mingw protocol-buffers autotools


    【解决方案1】:

    您应该有一个 MSys 控制台以及您的 MinGW 安装。这个控制台提供了一个类似 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 部分处理,但这里不是原生的。)

    【讨论】:

    • 这不正是 OP 所做的吗?
    • 可能是这样,在他编辑帖子之前我不知道
    • 哎呀,在您发布后,OP 已对其进行了编辑。对于那个很抱歉!显然投票已被锁定,所以如果您对其进行细微更改,我当然会修改我的反对票!
    【解决方案2】:

    在使用 MinGW 工具链时,您将无法使用 .lib 文件。相反,您可以直接链接到 dll。 The MinGW Wiki explains this.

    【讨论】:

    • +1 供参考。但我假设“直接与 DLL 链接”将静态链接而不是动态链接,对吗? IIRC 用于动态链接,您可以加载库 manually 或使用静态包装器为您执行此操作 - 这就是与 DLL 一起生成的 libNAME.a 包装器在后台执行的操作。
    • 我不确定您是否可以通过将 DLL 传递给带有一些标志的链接器来自动生成加载器代码;你能确认一下吗?
    • 这取决于他如何准确链接。我通过调用不需要任何输入库的g++ -o example_exe.exe example_exe.o example_dll.dll 来按照 Wiki 中的说明进行操作。
    • 是的,它似乎有效。感谢您指出了这一点。我想知道以这种方式支持哪些 DLL(例如,它们也可以是 MSVC 中的 C dll 吗?)。
    • 不,这仅适用于由 MinGW 工具链创建的 DLL。它是一种在 *NIX 系统上链接库(在这种情况下为 .so)的“正常”方式,而 MinGW 在 Windows 上反映了这一点。
    【解决方案3】:

    我可以同时获得 dll 和 lib。这是当您不想要静态 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 文件。

    希望这会有所帮助。如果没有,请在此处留言,我可以帮助您解决此问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-03-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-14
      • 1970-01-01
      相关资源
      最近更新 更多