在 Windows 中使用 MinGW 的 Google 协议缓冲区
Posted
技术标签:
【中文标题】在 Windows 中使用 MinGW 的 Google 协议缓冲区【英文标题】:Google protocol buffers using MinGW in Windows 【发布时间】:2015-08-24 09:59:54 【问题描述】:我正在尝试在 Windows 上的 Qt 中使用 google 协议缓冲区。因此,我使用 MingGW 的 msys 从 github 编译了 protobuf 源。 proto-compiler (protoc) 似乎工作正常,但不幸的是,它无法使用 Qt 环境中生成的 .ph.h 和 .pb.cc 文件。
将此添加到我的 .pro 文件中:
LIBS += "C:/MinGW/msys/1.0/bin/libprotobuf-10.dll"
INCLUDEPATH += "C:/MinGW/msys/1.0/include/"
但当我尝试编译该类的所有使用方法时,我仍然得到“未定义的引用...”。
代码必须正确,因为它在使用 protoc 和 Qt 的 linux 机器上运行良好。它必须是我包含 .dll 的方式,否则我包含错误的,因为标题似乎可以很好地解决。 根据这篇文章选择要包含的dll: http://www.ptrackapp.com/apclassys-notes/building-google-protocol/
我有点迷路了,如果有任何保留,我将不胜感激。
提前谢谢你。
【问题讨论】:
你在开发 MSYS 吗?为什么?作为 MSYS 的一部分,您提到的所有内容都没有任何位置。您自己的应用程序应该从不依赖C:/MinGW/msys/1.0/bin
中的任何DLL,也不要使用C:/MinGW/msys/1.0/include
中的任何标头;这些目录是为 MSYS 本身的开发保留的。也许您打算改为引用C:/MinGW/include
和C:/MinGW/bin
目录?
为了在 Windows 上使用协议缓冲区,我必须使用 MinGW 或 Cygwin 进行编译(github.com/google/protobuf,参见 Windows 部分)。但是为了能够在我的 Windows 应用程序中使用生成的 ph.h 和 pb.cc 文件,我需要相应的头文件和库,它们显然位于我编译它的 msys 目录中。我错过了什么,或者我怎么能在没有相应的头文件和库的情况下使用它们?
你错过了一些东西。使用 MinGW 编译时,您使用的头文件和库必须在C:/MinGW/include,lib,bin
树中;您必须不使用C:/MinGW/msys/1.0
树中的组件,因为这些组件是 MSYS 本身私有的,MinGW 编译器不使用它们。要么您错误地安装了自己的自建组件,要么您正在尝试使用不适合您使用的组件。在后一种情况下,您需要自己移植任何缺失的组件。
【参考方案1】:
通过使用以下配置前缀终于弄明白了:
./configure --prefix=`cd /mingw; pwd -W`
找到解决方案here!
【讨论】:
很好的发现。尝试从 mingw shell (msys.bat
) 运行 pwd -W
,如果你好奇的话,看看你会得到什么。以上是关于在 Windows 中使用 MinGW 的 Google 协议缓冲区的主要内容,如果未能解决你的问题,请参考以下文章
使用 Mingw 在 Windows 上安装 Linux 库
在 Windows 中使用 MinGW 的 Google 协议缓冲区
如何使用 mingw 在 Windows 中构建 protobuf-c?
如何在带有 MinGW 的 Windows 中使用 <gdal/gdal.h>?