在Windows 64位系统上编译Gopacket

7
我正在尝试在Windows 10上使用gopacket
我使用它来直接嗅探和注入数据包到/从NIC。
我可以轻松地使用GOARCH = 386编译和运行我的代码,但在GOARCH = amd64中无法编译。
值得注意的是:我并没有尝试交叉编译。
我使用go1.6.windows-386来编译32位版本,当我尝试使用GOARCH = amd64编译时,我使用go1.6.windows-amd64。
我使用TDM-GCC作为类Linux编译工具。
错误不是指示性的。它只是说:
c:/WpdPack/Lib/x64/wpcap.lib: error adding symbols: File in wrong format collect2.exe: error ld returned 1 exit status
如果可能的话,有人能否成功构建它?

我不太理解这个问题:唯一需要指定GOARCH的情况是交叉编译时;否则,GOARCHgo工具自行设置(您可以通过运行go env来验证)。所以,我是否正确理解您的意思:1)您有64位Windows;2)您在其上并排安装了两个Go软件包 - i386和x64;3)您还安装了两个为不同架构编译的TDM-GCC软件包? - kostix
如果是的话,尝试从shell中运行go build / go install命令应该会调用Go的x64版本构建。尝试使用-x命令行选项运行这些命令以查看它们调用了什么。 - kostix
@kostix 好的,为了简化:
  1. 我有一个64位的Windows。
  2. 我安装了32位的GO。
  3. 我编译并运行了我的程序(不用说它使用cgo来构建gopacket模块)。
  4. 我卸载了32位的GO。
  5. 我安装了64位的GO。
  6. 我尝试编译我的程序,但出现了给定的错误。
- J. Dow
那么,你的TDD-GCC安装程序也是x64吗? - kostix
是的。我同时拥有TDM-GCC x64和x86版本。在尝试编译x64版本时,我将PATH环境变量更改为x64 TDM-GCC文件夹的路径。 - J. Dow
显示剩余3条评论
3个回答

28

好的,我已经想出来了。
为了在Windows上编译64位的gopacket,您需要执行以下操作:

  1. 安装go_amd64(将go二进制文件添加到路径中)
  2. 安装TDM GCC x64(将TDM-GCC二进制文件添加到路径中)
  3. 还要将TDM-GCC \ x86_64-w64-mingw32 \ bin添加到路径中
  4. 安装Winpcap
  5. 下载Winpcap开发者包并将其提取到C:\

现在问题在于lib / x64文件夹中缺少linux静态库文件
(libwpcap.a和libpacket.a)。我不知道为什么它们没有被
包含在开发人员包中,但无论如何,这是我们可以生成它们的方法:

  1. 找到您计算机上的wpcap.dll和packet.dll(通常位于c:\ windows \ system32
  2. 将它们复制到其他临时文件夹中,否则您将不得不为以下命令提供管理员权限
  3. 在这些文件上运行gendef gendef wpcap.dllgendef packet.dll(可通过MinGW Installation Manager获取,包mingw32-gendef)
  4. 这将生成.def文件
  5. 现在我们将生成静态库文件:
  6. 运行dlltool --as-flags=--64 -m i386:x86-64 -k --output-lib libwpcap.a --input-def wpcap.def
  7. dlltool --as-flags=--64 -m i386:x86-64 -k --output-lib libpacket.a --input-def packet.def
  8. 现在只需将libwpcap.a和libpacket.a复制到c:\ WpdPack \ Lib \ x64中即可

就这样了。
现在gopacket应该可以无问题编译了。


0

我在Windows上以“Wpcap API兼容模式”安装了Npcap,现在gopacket可以正常工作。


0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接