Привязка Golang zmq, ZMQ4, возвращает ошибку пакета, не находящую файл zmq.h

Я пытаюсь включить сокеты ZMQ в приложение Go, но как zmq4, так и gozmq (упомянутые библиотеки привязки ZMQ для Go) вызывают у меня проблемы. Я хотел бы понять, почему zmq4 специально не импортируется в мою систему.

Я использую систему Windows 8, и я использовал установщик Windows с веб-сайта ZMQ для версии 4.0.3. Меня в первую очередь беспокоит настройка zmq4, и вот результат моего запроса "go get" о местоположении библиотеки 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 - ошибка остается прежней.

Я знаю, что проблема связана с библиотекой C zmq.h, которая находится в папке «include» моей установки ZMQ, но для меня остается загадкой, удерживается ли зависимость проблемой пути или проблемой внешнего инструмента.

Аналогичная ошибка возникла в отношении node.js и является решением, о котором я вижу, упоминаются другие, помимо сценариев node, но в моем случае это было неудачно.

До сих пор я включил путь к папке «include» в свою переменную среды PATH и ранее поместил zmq.h в папку верхнего уровня zmq4. У меня нет большого арсенала, чтобы понять эту проблему, потому что я новичок в C и C-импорте пакетов в Go


person user2628946    schedule 07.03.2014    source источник
comment
Не думаю, что вы получите ответ, не предоставив дополнительной информации. Какую платформу вы используете? Как вы установили ZMQ? Какие команды вы использовали, чтобы попытаться собрать gozmq?   -  person James Henstridge    schedule 07.03.2014
comment
Я отредактировал для получения дополнительной информации, дайте мне знать, что еще нужно, если я что-то пропустил. Также меня в первую очередь интересует решение моей ошибки zmq4; Я лучше понимаю, что вешает гозмк   -  person user2628946    schedule 07.03.2014
comment
@ user2628946 Есть ли прогресс? У меня такая же проблема с zmq4, и gozmq дает мне: # pkg-config --cflags libzmq libzmq libzmq libzmq exec: "pkg-config": executable file not found in %PATH%   -  person 10 cls    schedule 09.03.2014
comment
@ user2628946: попробуйте установить переменные среды C_INCLUDE_PATH и LIBRARY_PATH, чтобы включить вашу установку zmq, или, если zmq4 использует pkg-config, добавьте файл .pc с информацией об установке ... похоже, что zmq установлен в нестандартном месте и go build не поднимает его. @ 10cls: похоже, что gozmq использует pkg-config, чтобы получить флаги для сборки против libzmq, и у вас не установлен pkg-config. Установите его и убедитесь, что у вас есть допустимый файл * .pc для установки zmq, и повторите попытку.   -  person photoionized    schedule 08.04.2014


Ответы (4)


Я хотел сделать то же самое, но в Windows 7, и вот что мне пришлось сделать.

Поскольку привязки Go используют cgo для интеграции с zeromq, вам понадобится zeromq, построенный с помощью gcc. Предварительно собранных двоичных файлов нет, поэтому вам придется создавать их самостоятельно с помощью mingw или аналогичного, но этот процесс проще, чем может показаться, и хорошо описан на сайт zeromq.

Как указал @photoionized, при создании привязок Go необходимо установить C_INCLUDE_PATH и LIBRARY_PATH.

(В моем случае я столкнулся с проблемой при компиляции libzmq с не определенным IN6_ADDR. Единственное решение, которое я нашел, было вдохновлено эту проблему, чтобы вручную добавить строку #include <in6addr.h> в файл windows.hpp.)

person ivarg    schedule 15.08.2014

Версия установщика Windows ZeroMQ не будет работать с zmq4, вам нужно скомпилировать из исходников с помощью gcc, я рекомендую использовать MSYS2.

  1. Установите и обновите MSYS2, следуя инструкциям на странице http://sourceforge.net/p/msys2/wiki/MSYS2%20installation/
  2. Запустите mingw32_shell.bat или mingw64_shell.bat на основе арки Go (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 и поместите их рядом с программой 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
person user2172816    schedule 28.01.2015

Вот обновленные шаги для решения MSYS2 @ user2172816:

  1. Установите и обновите MSYS2, следуя инструкциям на странице http://sourceforge.net/p/msys2/wiki/MSYS2%20installation/
  2. Запустите mingw32_shell.bat или mingw64_shell.bat на основе арки Go (32-битной или 64-битной)
  3. pacman -S mingw-w64-(x86_64|i686)-toolchain make (x86_64 для 64-битной версии, i686 для 32-битной)
  4. Добавьте C:\msys64\mingw64\bin в свой путь (там есть pkg-config)
  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/lib к PKG_CONFIG_PATH (export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig)
  12. cd в папку 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

  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

person Joels Elf    schedule 09.02.2016

Обновленный ответ с использованием MSYS2.

  1. Установите руководство по установке MSYS2.
  2. Убедитесь, что вы выбрали правильную установку - 32-битную или 64-битную.
  3. Откройте соответствующую оболочку MSYS2 MinGW 64-bit или MSYS2 MinGW 32-bit. Все дальнейшие действия предполагают, что вы используете эту оболочку.
  4. Обновите пакеты, следуя инструкциям в руководстве по установке.
  5. Установите libtool pacman -Sy libtool.
  6. Загрузите исходный код zmq в любое место по вашему выбору.
  7. Перейдите в исходную папку zmq.
  8. Чтобы сгенерировать файл конфигурации, запустите средство автогенерации, запустив ./autogen.sh.
  9. В вероятном случае, когда шаг 8 завершится неудачно:

    1. Find the file at fault (probably version.sh).
    2. Замените окончания строк на (замените file фактическим именем файла).
      cp file file.bak

      tr -d '\r' <file.bak> file

    3. Если это не поможет, вам придется погрузиться в код и найти проблему.
  10. Запустите инструмент настройки ./configure.

  11. В случае выхода из строя. Закомментируйте пустые предложения else в файле конфигурации.

  12. Добавить Перейти к Path: PATH=${PATH}:<go bin directory>.

  13. Установить пакет Go: CGO_CFLAGS=-I/usr/local/include CGO_LDFLAGS=-L/usr/local/lib go get github.com/pebbe/zmq4
person nmz_razor    schedule 22.08.2018