Golang zmq绑定ZMQ4返回未找到文件zmq.h的包错误

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应用程序中包含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 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

  • 按照中的说明安装和更新MSYS2
  • 基于Go arch(32位或64位)启动mingw32_shell.bat或mingw64_shell.bat
  • 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
  • 复制以下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
    

  • 以下是@user2172816的MSYS2解决方案的更新步骤:

  • 按照中的说明安装和更新MSYS2
  • 基于Go arch(32位或64位)启动
    mingw32_shell.bat
    mingw64_shell.bat
  • pacman-S mingw-w64-(x86_64 | i686)-工具链制作
    (x86_64表示64位,i686表示32位)
  • C:\msys64\mingw64\bin
    添加到您的路径(pkg配置在那里)
  • 重新启动msys2 shell以获取新路径
  • 下载并解压缩libnail源代码:
  • 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
  • 将cd放入zeromq src文件夹
  • /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
  • 确保选择正确的32位或64位安装
  • 打开相应的shell
    MSYS2 MinGW 64位
    MSYS2 MinGW 32位
    所有后续步骤都假定您正在使用此shell
  • 按照网站上的说明更新软件包
  • 安装libtool
    pacman-Sy libtool
  • 下载到您选择的位置
  • 导航到zmq源文件夹
  • 要生成配置文件,请通过运行
    /autogen.sh
    运行autogen工具
  • 在步骤8可能失败的情况下:

  • 查找有故障的
    文件
    (可能是
    version.sh
  • 将行尾替换为(将
    文件
    替换为实际文件名)。
    cp文件file.bak

    tr-d'\r'文件

  • 如果这失败了,你将不得不深入代码并找到问题所在
  • 运行配置工具
    /configure

  • 在可能发生故障的情况下。C