Golang zmq绑定ZMQ4返回未找到文件zmq.h的包错误
我试图在Go应用程序中包含ZMQ套接字,但zmq4和gozmq(Go的参考ZMQ绑定库)都给我带来了问题。我想了解为什么zmq4在我的系统上不重要 我运行的是Windows 8系统,我使用的是ZMQ网站上的Windows安装程序,版本为4.0.3。我主要关心的是如何设置zmq4,下面是我对github库位置的“go-get”查询的结果:Golang zmq绑定ZMQ4返回未找到文件zmq.h的包错误,go,packages,zeromq,filepath,cgo,Go,Packages,Zeromq,Filepath,Cgo,我试图在Go应用程序中包含ZMQ套接字,但zmq4和gozmq(Go的参考ZMQ绑定库)都给我带来了问题。我想了解为什么zmq4在我的系统上不重要 我运行的是Windows 8系统,我使用的是ZMQ网站上的Windows安装程序,版本为4.0.3。我主要关心的是如何设置zmq4,下面是我对github库位置的“go-get”查询的结果: > go get github.com/pebbe/zmq4 # github.com/pebbe/zmq4 polling.go:4:17: fatal
> go get github.com/pebbe/zmq4
# github.com/pebbe/zmq4
polling.go:4:17: fatal error: zmq.h: No such file or directory
compilation terminated.
克隆Github存储库并不能缓解这个问题——错误仍然存在
我知道这个问题与位于我的zmq安装的“include”文件夹中的C库zmq.h有关,但是依赖关系是由路径问题还是外部工具问题引起的对我来说是个谜
在node.js中也出现了类似的错误,这是我看到其他人提到的解决方案,在节点脚本之外,但在我的例子中没有成功
到目前为止,我已经将“include”文件夹的路径包含在我的path环境变量中,并且之前将zmq.h放置在zmq4顶级文件夹中。我没有太多的武库来理解这个问题,因为我对Go中的C和C导入软件包不熟悉,我想做同样的事情,但在Windows7上,我必须做的就是这样 由于Go绑定使用cgo与zeromq集成,因此需要使用gcc构建zeromq。没有预构建的二进制文件,因此您必须使用mingw或类似的工具自己构建它们,但是这个过程比听起来容易,并且在上有很好的描述 正如@photoionized所指出的,
C_INCLUDE_PATH
和LIBRARY_PATH
需要在构建Go绑定时设置
(在我的例子中,我在编译libzmq时遇到了一个问题,没有定义
IN6_ADDR
。受启发,我找到的唯一解决方案是手动将行#include
添加到windows.hpp文件中。)ZeroMQ的windows安装程序版本无法与zmq4一起使用,您需要使用gcc从源代码进行编译,我建议使用MSYS2
pacman-S mingw-w64-(x86_64 | i686)-工具链制作
(x86_64表示64位,i686表示32位)cd
放入zeromq src文件夹(外壳内的C:\path以/C/开头)/configure
make
make-install
CGO_CFLAGS=-I/usr/local/include CGO_LDFLAGS=-L/usr/local/lib go get github.com/pebbe/zmq4
/usr/local/bin/libzmq.dll
/mingw(32 | 64)/bin/libgcc*.dll
/mingw(32 | 64)/bin/libwinpthread*.dll
/mingw(32 | 64)/bin/libstdc++*.dll
以下是@user2172816的MSYS2解决方案的更新步骤:
mingw32_shell.bat
或mingw64_shell.bat
pacman-S mingw-w64-(x86_64 | i686)-工具链制作
(x86_64表示64位,i686表示32位)C:\msys64\mingw64\bin
添加到您的路径(pkg配置在那里)cd
放入libnaude文件夹(shell中的C:\path以/C/开头)/configure--build=(x86_64 | i686)-w64-mingw32
make
make-install
/usr/local/lib
添加到打包配置路径(导出打包配置路径=$PKG\u配置路径:/usr/local/lib/pkgconfig
)
/configure--build=(x86_64 | i686)-w64-mingw32
#如果定义为ZMQ(你有32名)
#包括
#包括
#包括“netioapi.h”
#endif
src/tcpaddress.cpp的顶部
make
make-install
CGO_CFLAGS=-I/usr/local/include CGO_LDFLAGS=-L/usr/local/lib go get github.com/pebbe/zmq4
CGO\u CFLAGS=-I/usr/local/include CGO\u LDFLAGS=-L/usr/local/lib go build
在项目目录中
复制以下DLL并将其放在go程序(.exe)旁边:
/usr/local/bin/libzmq.dll
/mingw(32 | 64)/bin/libgcc*.dll
/mingw(32 | 64)/bin/libwinpthread-*.dll
/mingw(32 | 64)/bin/libstdc++*.dll
/usr/local/bin/libnaude-*.dll
也许吧<代码>/usr/local/bin/libnaid-*.def
使用MSYS2更新的答案
MSYS2 MinGW 64位
或MSYS2 MinGW 32位
所有后续步骤都假定您正在使用此shellpacman-Sy libtool
/autogen.sh
运行autogen工具李>
文件
(可能是version.sh
)文件
替换为实际文件名)。cp文件file.bak
tr-d'\r'文件
/configure