如何在go程序中删除wpcap.dll?

时间:2018-08-24 14:23:50

标签: go gcc winpcap

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

我的计划是检查是否已安装WinPcap,是否不通知用户他需要使用WinPcap来使用所有功能的100%。

但是我不明白这一点。如果WinPcap不可用,我不能使用gopacket。我的意思是...不是一行代码(=>崩溃)

有人知道我该如何解决吗?我实际上不需要gopacket。我的计划是,如果安装了,那就好了!如果不是,则不在乎...做其他事情。

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

请帮助我:(

enter image description here

2 个答案:

答案 0 :(得分:0)

您错了,因为您“没有[使用]一行代码”:不难看出 其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以便于选择该静态库。

答案 1 :(得分:0)

在“ Wpcap API兼容模式”下安装Npcap