Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ Winpcap开发者与Cygwin C++&;Netbeans IDE_C++_Windows_Netbeans_Cygwin_Winpcap - Fatal编程技术网

C++ Winpcap开发者与Cygwin C++&;Netbeans IDE

C++ Winpcap开发者与Cygwin C++&;Netbeans IDE,c++,windows,netbeans,cygwin,winpcap,C++,Windows,Netbeans,Cygwin,Winpcap,希望让Winpcap开发者包(4.1.2)在64位Windows 7上运行。我正在用C/C++在Netbeans IDE中用Cygwin(4.1.10)编译器编程。我想直接从UDP数据包中提取一些GPS数据,而不是使用另一个程序,通过中间步骤从文本文件中提取GPS数据。如果我不能解决这个问题,我下一步将在Ubuntu中尝试,看看是否可以让libpcap在那里工作(尽管Windows是首选,因为我正在使用其他设备)。这里是我的位置(我的主要资源是从tcpdump.org收集的,并在pcap上编程(

希望让Winpcap开发者包(4.1.2)在64位Windows 7上运行。我正在用C/C++在Netbeans IDE中用Cygwin(4.1.10)编译器编程。我想直接从UDP数据包中提取一些GPS数据,而不是使用另一个程序,通过中间步骤从文本文件中提取GPS数据。如果我不能解决这个问题,我下一步将在Ubuntu中尝试,看看是否可以让libpcap在那里工作(尽管Windows是首选,因为我正在使用其他设备)。这里是我的位置(我的主要资源是从tcpdump.org收集的,并在pcap上编程(注意:我不能发布第三个链接,因为它说我的声誉需要提高)):

  • 我已将winpcap开发者包安装到C:\Users\\Documents
  • 我已经安装了winpcap dll(尽管我不知道为什么这是必要的,因为我看到的所有文档似乎都只使用了.lib文件)
  • 根据上述链接的指示,我在项目中添加了以下设置:
    • 对于“Include Directories and Headers”,我从开发者包中放入了winpcapInclude文件夹的路径
    • 对于“预处理器定义”,我添加了HAVE_REMOTEWPCAP
    • 对于“附加库目录”,我从开发者包中放入winpcapLib文件夹的路径
  • 通过执行上述所有操作,并在不使用额外代码的情况下包含pcap.h头,我可以编译我的程序。然而,我一直在引用的安装说明也说明要添加以下两个“附加依赖项”:winpcap.libPacket.lib

    一旦我这样做,我就无法编译并获得以下内容:

    make[2]: Entering directory '/cygdrive/c/Users/<user>/Documents/NetBeansProjects/GPS_Parcer'
    make[2]: *** No rule to make target 'winpcap.lib', needed by 'dist/Debug/Cygwin_4.x-Windows/gps_parcer.exe'.  Stop.
    make[2]: Leaving directory '/cygdrive/c/Users/<user>/Documents/NetBeansProjects/GPS_Parcer'
    nbproject/Makefile-Debug.mk:61: recipe for target '.build-conf' failed
    make[1]: *** [.build-conf] Error 2
    make[1]: Leaving directory '/cygdrive/c/Users/<user>/Documents/NetBeansProjects/GPS_Parcer'
    nbproject/Makefile-impl.mk:39: recipe for target '.build-impl' failed
    make: *** [.build-impl] Error 2
    
    make[2]:输入目录“/cygdrive/c/Users//Documents/NetBeansProjects/GPS\u Parcer”
    make[2]:***没有规则将目标设置为'dist/Debug/Cygwin_4.x-Windows/gps_parcer.exe'所需的'winpcap.lib'。停止
    make[2]:离开目录“/cygdrive/c/Users//Documents/NetBeansProjects/GPS\u Parcer”
    nbproject/Makefile Debug.mk:61:目标“.build conf”的配方失败
    生成[1]:***[.build conf]错误2
    make[1]:离开目录“/cygdrive/c/Users//Documents/NetBeansProjects/GPS\u Parcer”
    nbproject/Makefile impl.mk:39:目标“.build impl”的配方失败
    make:**[.build impl]错误2
    
    出于好奇,我删除了这些依赖项,然后添加了一些从tcpdump.org复制的基本代码,看看它们是否真的重要:

    #include <stdio.h>
    #include <pcap.h>
    
    int main(int argc, char *argv[])
    {
        char *dev, errbuf[PCAP_ERRBUF_SIZE];
    
        dev = pcap_lookupdev(errbuf);  //error is here!
    
        if (dev == NULL) {
            fprintf(stderr, "Couldn't find default device: %s\n", errbuf);
            return(2);
        }
        printf("Device: %s\n", dev);
        return(0);
    }
    
    #包括
    #包括
    int main(int argc,char*argv[])
    {
    char*dev,errbuf[PCAP_errbuf_SIZE];
    dev=pcap_lookupdev(errbuf);//这里有错误!
    如果(dev==NULL){
    fprintf(stderr,“找不到默认设备:%s\n”,errbuf);
    返回(2);
    }
    printf(“设备:%s\n”,dev);
    返回(0);
    }
    
    我得到一个未定义的对“pcap\u lookupdev”的引用。错误

    我还读到Winpcap可能只适用于MS Visual Studio的东西,所以我实际上不知道这是不是真的


    很抱歉写了这么长的文章,但如果有人对此有一些见解或经验,我将不胜感激。

    我对同一套仪器也有类似的问题。今天我的经历成功了,我找到了解决办法

  • (最重要的)。由于您使用cygwin(即GNU Linux)工具链编译代码,因此需要向项目中添加直接库:libwpcap.alibpacket.a来自winpcap的开发者包:
    项目属性->链接器选项卡->库->添加库“
    (这只是在编译行中提供了该库的正确名称,如您所见:
    -lwpcap-lpacket
    )。不幸的是,这些库只有x32版本
  • 因此,如果您使用x64版本的cygwin(as I),那么:

  • 您需要下载并安装x32版本的cygwin。请确保在安装过程中选择编译器和其他必要的软件包。然后,在选项卡C/C++上的NetBeans属性中,从x32 cygwin添加工具链,并将其命名为
    cygwin_32
    。接下来,在项目的属性中选择此(
    cygwin_32
    )工具包并验证是否提供了指向WinPcap的正确目录
    /lib
    /include
    的路径。 尝试构建它。此时,您的项目应该已成功构建。接下来,为了能够运行您的程序,您必须提供位于cygwin的
    /bin
    目录中的cygwin1.dll的正确(x32)版本。(只需将其复制到可执行文件的目录中)
  • 因此获得了可执行文件,我用sp2在WinXP(x32)上测试成功,当然也在我的Win7 x64上测试成功。(对于测试,我使用了
    WpdPack\Examples pcap\basic\u dump\basic\u dump.c
    WpdPack\u 4\u 1\u 2.zip
    存档,原样)

    希望这对某人有帮助