2014-03-07 228 views
3

我想包括ZMQ套接字在Go應用程序中,但zmq4和gozmq(所謂的ZMQ綁定庫爲Go)給我的問題。我想了解爲什麼zmq4特別不能在我的系統上導入。Golang zmq綁定,ZMQ4,返回包錯誤找不到文件zmq.h

我正在運行Windows 8系統,並使用ZMQ網站上的4.0.3版本的Windows安裝程序。我主要關心越來越zmq4成立,這裏是對GitHub的庫的位置,我的「去把」查詢結果:

> 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。我沒有太多的阿森納,否則要了解這個問題,因爲我是新的C和C導入包在Go

+0

我不認爲你會得到一個答案,但沒有提供更多的信息。你在使用什麼平臺?你是如何安裝ZMQ的?你用什麼命令來嘗試和建立gozmq? –

+0

我編輯了更多信息,讓我知道如果我錯過了什麼,還需要什麼。此外,我主要對我的zmq4錯誤的解決方案感興趣;我更好地瞭解什麼是掛起gozmq – user2628946

+0

@ user2628946有沒有進展?我有與zmq4相同的問題,並且gozmq給了我:'#pkg-config --cflags libzmq libzmq libzmq libzmq exec:「pkg-config」:可執行文件未找到%PATH%' –

回答

2

我想做同樣的事情,但在Windows 7上,這裏是我所擁有的去做。

由於Go綁定正在使用cgo與zeromq集成,因此需要使用gcc構建的zeromq。沒有預先構建的二進制文件,因此您必須使用mingw或類似軟件自己構建它們,但此過程比聽起來容易,並且在zeromq site上進行了很好的描述。

正如@photoionized所指出的那樣,在構建Go綁定時需要設置C_INCLUDE_PATHLIBRARY_PATH

(在我的情況,我不IN6_ADDR被定義。唯一的解決辦法編譯libzmq時遇到了一個問題,我發現的是,通過this issue啓發,到行#include <in6addr.h>手動添加到windows.hpp文件。)

2

ZeroMQ的Windows安裝程序版本不適用於zmq4,您需要使用gcc從源代碼編譯,我推薦使用MSYS2。

  1. 安裝和 http://sourceforge.net/p/msys2/wiki/MSYS2%20installation/
  2. 以下更新MSYS2說明開始mingw32_shell.bat或mingw64_shell。基於轉到拱(32位或64位)
  3. pacman -S mingw-w64-(x86_64|i686)-toolchain make(x86_64的64位,i686的爲32位)
  4. cd成zeromq src文件夾蝙蝠(C:\路徑的開頭/ C /在殼體內)
  5. ./configure
  6. make
  7. make install
  8. CGO_CFLAGS=-I/usr/local/include CGO_LDFLAGS=-L/usr/local/lib go get github.com/pebbe/zmq4
  9. 複製以下dll文件,並把它們旁邊的圍棋程序(。exe文件): /usr/local/bin/libzmq.dll /mingw(32|64)/bin/libgcc*.dll /mingw(32|64)/bin/libwinpthread*.dll /mingw(32|64)/bin/libstdc++*.dll
0

這裏的更新步驟@ user2172816的MSYS2解決方案:

  1. 安裝和基於去拱下從http://sourceforge.net/p/msys2/wiki/MSYS2%20installation/
  2. 啓動指令更新MSYS2 mingw32_shell.batmingw64_shell.bat(32位或64bit)
  3. pacman -S mingw-w64-(x86_64|i686)-toolchain make(x86_64 for 64bit,i686 for 32bit)
  4. Add C:\msys64\mingw64\bin到您的路徑(pkg配置是存在的)
  5. 重新啓動msys2殼來獲得新的路徑
  6. 下載並解壓libsodium來源:https://github.com/jedisct1/libsodium/releases
  7. cd到libsodium文件夾(C:\路徑與/ C開始/外殼
  8. ./configure --build=(x86_64|i686)-w64-mingw32
  9. make
  10. make install
  11. 內)添加到/usr/local/libPKG_CONFIG_PATHexport PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
  12. 光盤放入zeromq src文件夾
  13. ./configure --build=(x86_64|i686)-w64-mingw32
  14. 添加

    #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
  • CGO_CFLAGS=-I/usr/local/include CGO_LDFLAGS=-L/usr/local/lib go build在項目目錄
  • 複製下面的dll文件,並把它們旁邊的圍棋程序(.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/libsodium-*.dll

  • 可能? /usr/local/bin/libsodium-*.def

    相關問題