【问题标题】:Problem in Installing Golang ZMQ for windows - fatal error: czmq.h: No such file or directory为 Windows 安装 Golang ZMQ 时出现问题 - 致命错误:czmq.h:没有这样的文件或目录
【发布时间】:2022-12-05 07:40:39
【问题描述】:

我尝试在 Golang 中使用 ZMQ 库并使用以下页面中的说明:https://zeromq.org/languages/go/。根据文档,libsodiumlibzmqczmq 是依赖关系。

GCC 从https://jmeubank.github.io/tdm-gcc/download/ 下载并安装在C:\gcc

然后为了安装vcpkg(用于安装其他包)https://github.com/Microsoft/vcpkg 存储库被下载并解压到C:\dev 目录。以下命令用于安装:

C:\dev>bootstrap-vcpkg.bat

要基于https://libsodium.gitbook.io/doc/installation安装libsodium,执行以下命令:

cd C:\dev
vcpkg integrate install
vcpkg install libsodium

要安装libzmqczmq,使用以下命令:

vcpkg install zeromq:x64-windows-static
vcpkg install czmq:x64-windows-static

安装依赖项后,我尝试为 Golang 安装 zeromq。但是运行以下命令:

go get gopkg.in/zeromq/goczmq.v4

导致这个错误:

go get gopkg.in/zeromq/goczmq.v4
# gopkg.in/zeromq/goczmq.v4
C:\Users\Noori\go\pkg\mod\gopkg.in\zeromq\goczmq.v4@v4.1.0\auth.go:4:10: fatal error: czmq.h: No such file or directory
    4 | #include "czmq.h"
      |          ^~~~~~~~
compilation terminated.

Windows 和 Golang 版本:Windows 10-x64 和 Go 1.17.3

go version
go version go1.17.3 windows/amd64

我是 golang 的初学者,请在这个领域帮助我。

【问题讨论】:

  • 您是否像安装页面上所说的那样安装了 libzmq 或 CZMQ?
  • 我试过libzmq
  • 安装页面说gopkg.in/zeromq/goczmqCZMQ的绑定,所以你也需要安装它(它还说你需要安装libsodium
  • @JimB 我安装了libsodiumlibzmqczmq 库。那是一条艰难的道路。之后我找到了这个文件:C:\MinGW\vcpkg\installed\x64-windows\include\czmq.h。即使现在当我运行go get gopkg.in/zeromq/goczmq.v4 时,还是会出现之前的错误。

标签: go


【解决方案1】:

经过多次尝试,我发现了如何为Go安装zmq

首先,我尝试了另一个GCC软件。从https://www.msys2.org/ 下载并安装在C:msys64 上的软件。

然后将C:msys64mingw64in添加到windows的PATH环境变量中。

然后一条一条运行以下命令(在执行命令之前,请参阅此解决方案底部的 2022 年 11 月 5 日更新).

pacman -Su
pacman -S --needed base-devel mingw-w64-x86_64-toolchain
pacman -S base-devel gcc vim cmake
pacman -S mingw-w64-x86_64-libsodium
pacman -S mingw-w64-x86_64-zeromq

最后,运行Go安装命令:

go get github.com/pebbe/zmq4

完成的。 现在看起来很容易:)


2022 年 11 月 5 日更新

通过更新 MSYS,此解决方案中出现了一些错误:

David Macek david.macek.0@gmail.com 是未知信任

基于this page,在运行 pacman 命令之前,它的配置应该被编辑。

要正常工作,请编辑C:msys64etcpacman.conf 文件并将行SigLevel 编辑为SigLevel = Never

【讨论】:

  • 我尝试了您的方法,但没有将路径添加到 env set CGO_CFLAGS=-IC:msys64mingw64includeset CGO_LDFLAGS=-LC:msys64mingw64lib。我得到zmq.h not found。但是当我添加它们时,我听到错误提示音ld.exe: $WORK043_x008.o:wrappers_windows.cgo2.c:(.text+0x468): undefined reference to __imp_zmq_msg_recv'`你有没有其他关于你是如何做到的指示?
  • 您是否从msys2.org 下载最新版本的 GCC?因为我尝试了另一个 GCC,但它们无法正常工作。
  • 我终于弄明白了。这是因为没有设置 libzmq.dll 的 env car。而且 cgo ldflags 也没有包含 lib 文件的名称。我已经向 pebble 的 git 发送了一个 PR,希望包含这些精度
猜你喜欢
  • 2021-10-09
  • 2018-02-27
  • 1970-01-01
  • 2013-11-27
  • 1970-01-01
  • 1970-01-01
  • 2015-04-18
  • 2016-05-04
  • 1970-01-01
相关资源
最近更新 更多