在Windows 64bit上编译gopacket

J. *_*Dow 7 winpcap go cgo gopacket

我正在尝试在我的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

有没有人设法建立这个,如果它甚至可能?

J. *_*Dow 28

好的,所以我已经弄清楚了.
要在Windows上编译gopacket 64bit,您需要执行以下操作:

  1. 安装go_amd64(将二进制文件添加到PATH)
  2. 安装TDM GCC x64(将TDM-GCC二进制文件添加到PATH)
  3. 还要将TDM-GCC\x86_64-w64-mingw32\bin添加到PATH
  4. 安装Winpcap
  5. 下载Winpcap开发人员包并将其解压缩到C:\

现在重点是
lib/x64文件夹中缺少linux静态库文件(libwpcap.a和libpacket.a).我不知道他们为什么不
包含在开发人员包中,但无论如何我们可以生成它们:

  1. 在您的PC中找到wpcap.dll和packet.dll(通常在c:\ windows\system32中
  2. 将它们复制到其他临时文件夹,否则您必须为以下命令提供Admin privs
  3. 这些文件运行gendef gendef wpcap.dllgendef packet.dll(使用MinGW安装管理器获得,包的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应该编译没有问题.