【问题标题】:Can't compile Go application using cgo through TDM-GCC on Windows无法在 Windows 上通过 TDM-GCC 使用 cgo 编译 Go 应用程序
【发布时间】:2021-01-21 21:59:02
【问题描述】:

我已经安装了 TDM-GCC-64 发行版,并设置为 PATH 变量。我仍然无法安装 cgo 发行版github.com/mattn/go-sqlite3。在阅读与问题最相关的答案 (This) 之前,我已经安装了 CygWin。但是,安装 tdm 发行版并没有什么不同。

我在尝试运行应用程序时收到以下错误:

c:\go\pkg\tool\windows_amd64\link.exe: running gcc failed: exit status 1
/usr/lib/gcc/x86_64-pc-cygwin/10/../../../../x86_64-pc-cygwin/bin/ld: cannot find -lmingwex
/usr/lib/gcc/x86_64-pc-cygwin/10/../../../../x86_64-pc-cygwin/bin/ld: cannot find -lmingw32
collect2: error: ld returned 1 exit status

【问题讨论】:

    标签: sqlite go


    【解决方案1】:

    由于PATH 环境变量设置,您的Go 安装似乎仍在使用Cygwin 分发版调用gcc。尝试在您的 PATH 环境变量前面加上 Mingw64 分发 bin\ 目录的路径(这不会持续,因此您需要在同一命令行窗口中尝试 go run):

    set PATH=C:\Path\To\Mingw64\Installation\bin;%PATH%
    go run whatever.go
    

    (注意:确保你有\bin。如果你的Mingw64发行版安装在C:\Mingw64,它将是C:\Mingw64\bin

    如果上面有帮助并且您想永久修复此问题(并且您不依赖命令行中的 Cygwin 工具,因为下面的操作将用 Mingw64 替换一些命令)确保在您的 PATH 环境变量路径中指向 Mingw64在 Cygwin 路径之前。您可以通过以下方式做到这一点:

    1. Windows 键 + R 调出运行对话框
    2. 输入 rundll32.exe sysdm.cpl,EditEnvironmentVariables 并按 Enter 以显示系统变量对话框
    3. 在名为USERNAME的用户变量的顶部,双击变量列为Path的行,打开编辑环境变量对话框
    4. 现在检查 Mingw64 安装 /bin 目录的路径所在的行是否高于 Cygwin 安装 /bin 目录的路径所在的行。 如果它在下方,请单击它以将其选中,然后根据需要多次单击上移按钮将其置于 Cygwin 路径上方
    5. 完成后,使用 OK 按钮关闭两个对话框

    虽然您可以在 Cygwin 中安装 mingw64 包,但它很可能与 Go 工具不兼容,official documentation 建议将 Mingw64/MSYS 作为编译器套件来获取gcc - 我强烈建议使用文档中链接的最新发行版。

    【讨论】:

    • 感谢您的详细解答!我完全从我的系统中删除了 Cygwin,因为我安装它只是为了这个目的。将到 Mingw64 的路径移动到环境变量的顶部附近,然后重新启动控制台和 VSCode(打开了自己的控制台)对我有用。
    猜你喜欢
    • 1970-01-01
    • 2019-07-31
    • 1970-01-01
    • 2015-11-25
    • 1970-01-01
    • 1970-01-01
    • 2016-08-30
    • 2015-04-24
    • 2010-11-28
    相关资源
    最近更新 更多