4

Go アプリに ZMQ ソケットを含めようとしていますが、zmq4 と gozmq (参照されている Go 用の ZMQ バインディング ライブラリ) の両方で問題が発生しています。zmq4 が特に私のシステムにインポートできない理由を理解したいと思います。

Windows 8 システムを実行しており、バージョン 4.0.3 の ZMQ Web サイトの Windows インストーラーを使用しました。私は主に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 を配置しました。私はCおよびGoでのCインポートパッケージが初めてなので、この問題を理解するための武器はあまりありません

4

4 に答える 4

2

私は同じことをしたかったのですが、Windows 7 で、これが私がしなければならなかったことです。

Go バインディングは cgo を使用してzeromqと統合しているため、gcc でビルドされた zeromq が必要です。ビルド済みのバイナリは存在しないため、mingw などを使用して自分でビルドする必要がありますが、このプロセスは思ったより簡単で、zeromq サイトで適切に説明されています。

@photoionized が指摘したように、Go バインディングを構築するときに設定する必要がありますC_INCLUDE_PATHLIBRARY_PATH

(私の場合、定義されていない libzmq をコンパイルするときに問題に遭遇しました。私が見つけた唯一の解決策は、この問題IN6_ADDRに触発されて、windows.hpp ファイルに手動で行を追加することでした。)#include <in6addr.h>

于 2014-08-15T12:48:27.143 に答える
2

ZeroMQ の Windows インストーラー バージョンは zmq4 では動作しません。gcc を使用してソースからコンパイルする必要があります。MSYS2 を使用することをお勧めします。

  1. http://sourceforge.net/p/msys2/wiki/MSYS2%20installation/の指示に従って、MSYS2 をインストールして更新します。
  2. Go アーキテクチャ (32 ビットまたは 64 ビット) に基づいて mingw32_shell.bat または mingw64_shell.bat を起動します。
  3. pacman -S mingw-w64-(x86_64|i686)-toolchain make(64 ビットの場合は x86_64、32 ビットの場合は i686)
  4. cdzeromq 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 をコピーして、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
于 2015-01-28T10:19:28.760 に答える
0

@ user2172816 の MSYS2 ソリューションの更新された手順は次のとおりです。

  1. http://sourceforge.net/p/msys2/wiki/MSYS2%20installation/の指示に従って、MSYS2 をインストールして更新します。
  2. mingw32_shell.batormingw64_shell.batベースの Go アーキテクチャ (32 ビットまたは 64 ビット) を開始します。
  3. pacman -S mingw-w64-(x86_64|i686)-toolchain make(64bitならx86_64、32bitならi686)
  4. パスに追加C:\msys64\mingw64\binします (pkg-config があります)
  5. msys2 シェルを再起動して、新しいパスを取得します
  6. libsodium ソースをダウンロードして解凍します: https://github.com/jedisct1/libsodium/releases
  7. cdlibsodium フォルダーに移動します (C:\ パスはシェル内で /c/ で始まります)
  8. ./configure --build=(x86_64|i686)-w64-mingw32
  9. make
  10. make install
  11. ( )/usr/local/libに追加PKG_CONFIG_PATHexport PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
  12. zeromq src フォルダーに cd します
  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

  1. make
  2. make install
  3. CGO_CFLAGS=-I/usr/local/include CGO_LDFLAGS=-L/usr/local/lib go get github.com/pebbe/zmq4
  4. CGO_CFLAGS=-I/usr/local/include CGO_LDFLAGS=-L/usr/local/lib go buildあなたのプロジェクトディレクトリに
  5. 次の 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/libsodium-*.dll

多分?/usr/local/bin/libsodium-*.def

于 2016-02-09T14:49:04.207 に答える