我试图在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出现了类似的错误,并且是我在节点脚本之外看到的其他人提到的解决方案,但在我的情况下却没有成功。
到目前为止,我已经在我的PATH环境变量中包含了“include”文件夹的路径,之前在zmq4顶层文件夹中放置了zmq.h。我没有太多的武器来理解这个问题,因为我是Go的新手C和C导入包
答案 0 :(得分:2)
我想做同样的事情,但在Windows 7上,这就是我必须做的事情。
由于Go绑定使用 cgo 与zeromq集成,因此需要使用gcc构建zeromq。没有预先构建的二进制文件,因此您必须自己构建它们,使用mingw或类似的方法,但这个过程比听起来更容易,并在zeromq site上很好地描述。
正如@photoionized所指出的那样,在构建Go绑定时需要设置C_INCLUDE_PATH
和LIBRARY_PATH
。
(在我的情况下,我在编译libzmq并且未定义IN6_ADDR
时遇到了问题。我发现的唯一解决方案是受this issue的启发,手动添加行{{1}到windows.hpp文件。)
答案 1 :(得分:2)
ZeroMQ的Windows安装程序版本不适用于zmq4,需要使用gcc从源代码编译,我建议使用MSYS2。
pacman -S mingw-w64-(x86_64|i686)-toolchain make
(x86_64代表64位,i686代表32位)cd
进入zeromq src文件夹(C:\ path以shell中的/ 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
答案 2 :(得分:0)
以下是@ user2172816的MSYS2解决方案的更新步骤:
SELECT SUM(reach) AS reach, SUM(impressions) AS impressions, cpc, id_name,
SUM(clicks) AS clicks, SUM(amount_spent) AS amount, pagename,
(CASE WHEN MAX(status = 'active') > 0 THEN 'active'
ELSE MAX(status)
END) as status
FROM mbk_ad_data
WHERE id_campaign_shortname = 'name' AND adset_name NOT LIKE '%MSN%' AND
date_from = '2016-02-02' AND date_to = '2016-02-09'
GROUP BY id_name, cpc, id_name, pagename;
或mingw32_shell.bat
mingw64_shell.bat
(x86_64代表64位,i686代表32位)pacman -S mingw-w64-(x86_64|i686)-toolchain make
添加到您的路径(pkg-config就在那里)C:\msys64\mingw64\bin
进入libsodium文件夹(C:\ path以shell中的/ c /开头)cd
./configure --build=(x86_64|i686)-w64-mingw32
make
make install
添加到/usr/local/lib
(PKG_CONFIG_PATH
)export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
添加
./configure --build=(x86_64|i686)-w64-mingw32
#ifdef ZMQ_HAVE_MINGW32
#include <winsock2.h>
#include <windows.h>
#include "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
复制以下dll并将它们放在go程序(.exe)旁边:
CGO_CFLAGS=-I/usr/local/include CGO_LDFLAGS=-L/usr/local/lib go build
/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/libsodium-*.dll
答案 3 :(得分:0)
使用MSYS2的更新答案。
MSYS2 MinGW 64-bit
或MSYS2 MinGW 32-bit
。 所有其他步骤均假定您正在使用此外壳程序。pacman -Sy libtool
。./autogen.sh
运行autogen工具。 在步骤8可能失败的情况下:
file
(可能是version.sh
)。将行尾替换为(用实际文件名替换file
)。
cp file file.bak
tr -d '\r' <file.bak> file
运行配置工具./configure
。
在可能的故障情况下。注释掉配置文件中的空else
子句。
添加转到Path
:PATH=${PATH}:<go bin directory>
。
CGO_CFLAGS=-I/usr/local/include CGO_LDFLAGS=-L/usr/local/lib go get github.com/pebbe/zmq4