Chinaunix首页 | 论坛 | 博客
  • 博客访问: 5708365
  • 博文数量: 675
  • 博客积分: 20301
  • 博客等级: 上将
  • 技术积分: 7671
  • 用 户 组: 普通用户
  • 注册时间: 2005-12-31 16:15
文章分类

全部博文(675)

文章存档

2012年(1)

2011年(20)

2010年(14)

2009年(63)

2008年(118)

2007年(141)

2006年(318)

分类: C/C++

2006-10-25 15:05:45

我们还是看一下前面的一个简单的程序,获取系统的网络接口列表的程序,需要连接wpcap.lib

 

#include

main()

{

    pcap_if_t *alldevs;

    pcap_if_t *d;

    int i=0;

    char errbuf[PCAP_ERRBUF_SIZE];

 

    /* Retrieve the device list from the local machine */

    if (pcap_findalldevs_ex(PCAP_SRC_IF_STRING, NULL /* auth is not needed */, &alldevs, errbuf) == -1)

    {

        fprintf(stderr,"Error in pcap_findalldevs_ex: %s\n", errbuf);

        exit(1);

    }

 

    /* Print the list */

    for(d= alldevs; d != NULL; d= d->next)

    {

        printf("%d. %s", ++i, d->name);

        if (d->description)

            printf(" (%s)\n", d->description);

        else

            printf(" (No description available)\n");

    }

 

    if (i == 0)

    {

        printf("\nNo interfaces found! Make sure WinPcap is installed.\n");

        return -1;

    }

 

    /* We don't need any more the device list. Free it */

    pcap_freealldevs(alldevs);

}

 

 

 

编译不通过,对于一些函数例如pcap_findalldevs_ex需要添加一个同文件

#include

 

添加头文件之后,还是无法编译成功,Why

头文件的问题已经解决了,剩下的就是链接的问题了。

初步猜测是链接的时候,没有链接上wpcap.lib导致的。

 

gcc –o test.exe test.c -lwpcap

 

Ok,问题解决了,可是我不是很习惯在命令行里面进行编译,多麻烦啊。使用CodeBlock吧。

 

我已经在CodeBlock里面添加了lib的路径和include的路径,为什么还是连接失败呢?

等等,编译的时候成功,但是链接的时候失败,说明包含的路径是没有问题的,那还是我们的库没有在连接的时候链接进去。怎么办?

 

虽然我们的IDE设置了路径,也就是说我们指定了编译时的include和链接时的libIDE只是知道了什么我可以进行链接,但是我们并没有告诉他,需要链接什么,这就是问题。

 

那好,现在我们来告诉IDE要链接什么?一般都在Project选项里面。

嗯,CodeBlock有一个Build Option选项,似乎是,看一下吧。

 

噢,里面有一个Linker选项,可以添加一些链接的库,这样我们就可以添加进我们的库了。

因为我们已经把路径加进了lib路径里面,这样我们就可以直接的指定库的名称就可以了,例如wpcap

查了一下标准C还支持一种#pragma的预处理指令,可以加载指定的库,可是在CodeBlock里面就是不行,这是郁闷。在VC里面使用就可以使用,不用在Project里面进行设定

 

#pragma comment(lib,"wpcap")

 

阅读(1321) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~