如何使用MinGW安装go包,这取决于libiconv

时间:2017-02-14 16:13:24

标签: windows gcc go mingw libiconv

我目前正在尝试设置一个Go项目,考虑到我正在运行Windows,而其他两个开发人员正在使用Mac,我在安装一些软件包时遇到了一些麻烦。

尝试使用cmd安装软件包之后,我只能安装4个中的2个。其他两个需要gcc。

因此,我安装了MinGW。我能够以这种方式安装第三个包,但现在我被卡在https://github.com/mikkyang/id3-go

它似乎依赖于另一个基础项目https://github.com/djimenez/iconv-go。在我尝试go install id3-go的那一刻,我总是留下这个错误:

src\github.com\djimenez\iconv-go\converter.go:8:19: fatal error: iconv.h: No such file or directory

不知何故,我需要在minGW中使用libiconv,但我不知道如何连接两个部分。我并不是该领域的专家,所以任何帮助都会受到很多赞赏。我已经下载了libiconv for Windows。

我在github项目中找到的其他信息的相关问题: https://github.com/mikkyang/id3-go/issues/21

编辑:我在整个问题上取得了一些进展。我现在得到了我需要的所有文件,但现在我被这个警告困住了:

# github.com/djimenez/iconv-go
E:/Tools/TDM-GCC/bin/../lib/gcc/x86_64-w64-mingw32/5.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -liconv
collect2.exe: error: ld returned 1 exit status

我尝试将libiconv2.a从我的libiconv安装添加到mingw32 lib文件夹,但这就是我最终的结果:

# github.com/djimenez/iconv-go
E:/Tools/TDM-GCC/bin/../lib/gcc/x86_64-w64-mingw32/5.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible E:/Tools/TDM-GCC/bin/../lib/gcc/x86_64-w64-mingw32/5.1.0/../../../../x86_64-w64-mingw32/lib/../lib/libiconv.a when searching for -liconv
E:/Tools/TDM-GCC/bin/../lib/gcc/x86_64-w64-mingw32/5.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible E:/Tools/TDM-GCC/bin/../lib/gcc/x86_64-w64-mingw32/5.1.0/../../../../x86_64-w64-mingw32/lib/../lib\libiconv.a when searching for -liconv
E:/Tools/TDM-GCC/bin/../lib/gcc/x86_64-w64-mingw32/5.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible E:/Tools/TDM-GCC/bin/../lib/gcc/x86_64-w64-mingw32/5.1.0/../../../../x86_64-w64-mingw32/lib/libiconv.a when searching for -liconv
E:/Tools/TDM-GCC/bin/../lib/gcc/x86_64-w64-mingw32/5.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible E:/Tools/TDM-GCC/bin/../lib/gcc/x86_64-w64-mingw32/5.1.0/../../../../x86_64-w64-mingw32/lib\libiconv.a when searching for -liconv
E:/Tools/TDM-GCC/bin/../lib/gcc/x86_64-w64-mingw32/5.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible E:/Tools/TDM-GCC/bin/../lib/gcc/x86_64-w64-mingw32/5.1.0/../../../../x86_64-w64-mingw32/lib/../lib/libiconv.a when searching for -liconv
E:/Tools/TDM-GCC/bin/../lib/gcc/x86_64-w64-mingw32/5.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: skipping incompatible E:/Tools/TDM-GCC/bin/../lib/gcc/x86_64-w64-mingw32/5.1.0/../../../../x86_64-w64-mingw32/lib/libiconv.a when searching for -liconv
E:/Tools/TDM-GCC/bin/../lib/gcc/x86_64-w64-mingw32/5.1.0/../../../../x86_64-w64-mingw32/bin/ld.exe: cannot find -liconv
collect2.exe: error: ld returned 1 exit status

我不知道如何从这里开始。

1 个答案:

答案 0 :(得分:2)

当我想go install github.com/google/gopacket需要CGO时,我遇到了同样的问题。这是因为您的libiconv2.a是由其他编译器生成的,因此它与mingw32编译器不兼容,如错误消息所示。我们需要使用mingw32工具集生成静态库:

  1. 在PC中找到libiconv-2.dll(coreonding动态库)
  2. 在这些文件gendef上运行gendef libiconv-2.dll(位于我的64位Windows中的C:\ TDM-GCC-64 \ x86_64-w64-mingw32 \ bin),这将生成libiconv2.def文件
  3. 然后生成静态库:

    dlltool --as-flags=--64 -m i386:x86-64 -k --output-lib libiconv2.a --input-def libiconv2.def

  4. 将libiconv2.a复制到正确的位置。