go - 在 Windows 64 位上编译 gopacket

标签 go winpcap cgo gopacket

我正在尝试使用 gopacket在我的 Windows 10 上。
我正在使用它来嗅探数据包并将其直接注入(inject) NIC 或从 NIC 直接注入(inject)数据包。
我可以使用 GOARCH=386 轻松编译和运行我的代码,但不能使用 GOARCH=amd64。

值得注意的是:我并没有尝试交叉编译。
我正在使用 go1.6.windows-386 编译 32 位版本,当我尝试使用 GOARCH=amd64 进行编译时,我使用 go1.6.windows-amd64。

我使用TDM-GCC作为linux之类的编译工具。
该错误不是指示性的。它只是说

c:/WpdPack/Lib/x64/wpcap.lib: 添加符号时出错:文件格式错误 collect2.exe:错误 ld 返回 1 退出状态

有没有人设法构建这个,如果可能的话?

最佳答案

好的,我已经弄明白了。
为了在 Windows 上编译 gopacket 64bit,你需要执行以下操作:

  1. 安装 go_amd64(将 go 二进制文件添加到您的 PATH)
  2. 安装 TDM GCC x64(将 TDM-GCC 二进制文件添加到您的 PATH)
  3. 同时将 TDM-GCC\x86_64-w64-mingw32\bin 添加到您的 PATH
  4. 安装 Winpcap
  5. Download Winpcap developer's pack并解压到C:\

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

  1. 在您的 PC 中找到 wpcap.dll 和 packet.dll(通常在 c:\windows\system32 中
  2. 将它们复制到其他临时文件夹,否则您必须为以下命令提供管理员权限
  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 应该可以毫无问题地编译。

关于go - 在 Windows 64 位上编译 gopacket,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38047858/

相关文章:

go - 为什么我的结构中的变量不保持其值?

go - 创建通用函数以从 map 中提取值

python - 解决 setup.py 中的 header 依赖关系

java - Winpcap 与 jnetpcap 和 Windows 10

go - Cgo “undefined reference”(gstreamer)

go - 如何通过 golang 中的 CGO 将 Go 字符串复制到 C char *?

go - 编码 xml 字段时如何使用结构标签?

pointers - 如何将不同的错误接口(interface)实现存储在一起,然后在 Go 中使用它们进行类型比较?

c++ - 监视本地 pc 网络和阻止 ip 是 winpcap 是工具吗?

go - 在cgo中定义变量