【问题标题】:Compile cgo lib on Cygwin64: "ld: cannot find -lmingw32"在 Cygwin64 上编译 cgo lib:“ld:找不到 -lmingw32”
【发布时间】:2017-04-25 23:57:33
【问题描述】:

我正在尝试在 Windows 上使用 cgo 库,即github.com/mattn/go-sqlite3

我使用 Cygwin64 并安装了所有“开发”包,所以 gcc 可用。

但运行 go get github.com/mattn/go-sqlite3 会导致:

/usr/lib/gcc/x86_64-pc-cygwin/5.3.0/../../../../x86_64-pc-cygwin/bin/ld: cannot find -lmingwex
/usr/lib/gcc/x86_64-pc-cygwin/5.3.0/../../../../x86_64-pc-cygwin/bin/ld: cannot find -lmingw32

如果我在 Cygwin 安装程序中搜索“mingwex”和“mingw32”,我没有得到任何结果。我是在寻找错误的名称还是它们在 64 位系统上不可用?

或者有没有更好的方法在 Windows 上使用该库?


请注意,自述文件指出

但是,如果您使用 go install 安装 go-sqlite3 github.com/mattn/go-sqlite3,你不需要 gcc 来构建你的应用程序 没有了

但如果我使用 go install,我会收到相同的错误消息。

$ go version
go version go1.6.2 windows/amd64

【问题讨论】:

  • gcc 用于在 Cygwin 上为 Cygwin 构建。 mingw32 用于为 Windows 构建。可能您想使用从 Cygwin 到 Windows 的交叉编译器 /usr/bin/x86_64-w64-mingw32-gcc.exe 吗?
  • @matzeri 感谢您的建议,但我不知道如何告诉 go,使用哪个 gcc 二进制文件。实际上,为 cygwin 构建对我来说也很好,如果我能让它工作的话。有什么想法吗?
  • 我没有看到 go 作为 cygwin 包,所以为 cygwin 构建似乎很复杂。查看设置CC或GCC变量是否有效
  • 在mingw64上我需要安装mingw-w64-x86_64-gcc

标签: gcc go sqlite cygwin cgo


【解决方案1】:

最终对我有用(而不是 Cygwin)是从 http://tdm-gcc.tdragon.net/download 下载 TDM MinGW-w64 并设置 PATH 以便使用来自 C:\TDM-GCC-64\bin 的 gcc。

【讨论】:

  • 供参考,问题已澄清here- MinGW: http://www.mingw.org/ * add "c:\MinGW\bin" to PATH * run "mingw-get install gcc" * required for building sqlite Go package * note: using Cygwin GCC doesn't work
【解决方案2】:

您也可以从 Cygwin 安装包 mingw64-i686-gcc-core

二进制文件为/usr/bin/i686-w64-mingw32-gcc.exe,因此您可能需要将其复制为/usr/bin/gcc.exe

【讨论】:

  • /usr/bin/gcc.exe 文件已存在。我应该用现有的gcc.exe 文件替换它吗?
【解决方案3】:

我也遇到了同样的问题。在我看来,cygwin 与 cgo 并不完全兼容。相反,我使用了https://mingw-w64.org

来自 cgo 文档https://github.com/golang/go/wiki/cgo

为了在 Windows 上使用 cgo,您还需要先安装 gcc 编译器(例如,mingw-w64)并在 PATH 环境变量中添加 gcc.exe(等),然后才能使用 cgo 进行编译.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-12
    • 2022-08-22
    • 2012-09-01
    • 1970-01-01
    • 2019-03-13
    • 1970-01-01
    • 2020-01-04
    • 1970-01-01
    相关资源
    最近更新 更多