gpt4 book ai didi

go - 如何在我的 go 程序中删除 wpcap.dll 的需要?

转载 作者:数据小太阳 更新时间:2023-10-29 03:22:09 24 4
gpt4 key购买 nike

我在我的程序中使用了 gopacket。在 Linux 上,它运行完美。但是在 Windows 上,如果我之前没有安装 WinPcap,整个程序就会崩溃。

我的计划是检查是否安装了 WinPcap,如果没有安装则通知用户他需要它才能使用 100% 的所有功能。

但我还没有说到这一点。如果 WinPcap 不可用,我就不能使用 gopacket。我的意思是......没有一行代码(=> 崩溃)

有人知道我该如何解决这个问题吗?我实际上不需要 gopacket。我的计划是,如果安装了,很好, super !如果没有,不关心...做其他事情。

但现在我有两个选择...完全删除 gopacket 或找到一种无需 wpcap.dll 即可启动我的程序的方法。至少告诉用户他需要它。

请帮帮我:(

enter image description here

最佳答案

你错了,因为你“没有[使用]它的一行代码”:不难看出它的Windows-specific code calls into winpcap.dll .

更好玩的是它的Unix-specific code calls into libpcap.so ,这意味着您可以在本地系统上使用它,这仅仅是因为您安装了 libpcap 包(或您的代码中命名的任何内容)。

所有这些都意味着目前你的程序不是真正可移植的无论如何(我的意思是,从某种意义上说,您认为它是便携的)。你可以运行类似的东西

$ ldd ./yourbinary

并看到它打印了对某个版本的 libpcap.so 的引用。


有几种方法可以解决这个问题。

最简单的方法是尝试将 winpcap.dll 与您的二进制文件一起发送。默认情况下,Windows 在尝试加载它们的应用程序的当前目录中查找 DLL。由于 gopacket 使用 cgo,这意味着 winpcap.dll 试图在应用程序启动时链接它,因此应用程序没有机会在尝试找到并链接该库之前更改其工作目录。

一个更复杂的方法是制作(或获得)winpcap 库的静态版本(记住 DLL 是一个库,只是它的一种特殊形式)然后跳转构建 gopacket 所以它选择了那个静态库。

关于go - 如何在我的 go 程序中删除 wpcap.dll 的需要?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52006555/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com