如何使用依赖于 libiconv 的 MinGW 安装 go 包
How can I install a go package with MinGW which depends on libiconv
我目前正在尝试建立一个 Go 项目,考虑到我 运行 Windows,而其他 2 位开发人员正在 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
不知何故,我需要将 libiconv 与 MinGW 一起使用,但我不知道如何连接这两个部分。我不是那个领域的专家,所以任何帮助都会非常感激。我已经为 Windows 下载了 libiconv。
我在 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
我尝试将我的 libiconv 安装中的 libiconv2.a 添加到 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
我不知道如何从这里开始。
当我想要 go install github.com/google/gopacket
需要 CGO
时,我遇到了同样的问题。这是因为你的 libiconv2.a
是由其他编译器生成的,所以它与错误消息中所说的 mingw32 编译器不兼容。我们需要使用 mingw32 工具集生成静态库:
- 在你的PC中找到libiconv-2.dll(核心动态库)
- 运行
gendef
(位于我的 64 位 Windows 中的 C:\TDM-GCC-64\x86_64-w64-mingw32\bin 中)在那些文件 gendef libiconv-2.dll
上,这将生成 libiconv2.def 文件
然后生成静态库:
dlltool --as-flags=--64 -m i386:x86-64 -k --output-lib libiconv2.a --input-def libiconv2.def
复制libiconv2.a到合适的位置。
我目前正在尝试建立一个 Go 项目,考虑到我 运行 Windows,而其他 2 位开发人员正在 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
不知何故,我需要将 libiconv 与 MinGW 一起使用,但我不知道如何连接这两个部分。我不是那个领域的专家,所以任何帮助都会非常感激。我已经为 Windows 下载了 libiconv。
我在 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
我尝试将我的 libiconv 安装中的 libiconv2.a 添加到 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
我不知道如何从这里开始。
当我想要 go install github.com/google/gopacket
需要 CGO
时,我遇到了同样的问题。这是因为你的 libiconv2.a
是由其他编译器生成的,所以它与错误消息中所说的 mingw32 编译器不兼容。我们需要使用 mingw32 工具集生成静态库:
- 在你的PC中找到libiconv-2.dll(核心动态库)
- 运行
gendef
(位于我的 64 位 Windows 中的 C:\TDM-GCC-64\x86_64-w64-mingw32\bin 中)在那些文件gendef libiconv-2.dll
上,这将生成 libiconv2.def 文件 然后生成静态库:
dlltool --as-flags=--64 -m i386:x86-64 -k --output-lib libiconv2.a --input-def libiconv2.def
复制libiconv2.a到合适的位置。