分类: 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和链接时的lib,IDE只是知道了什么我可以进行链接,但是我们并没有告诉他,需要链接什么,这就是问题。
那好,现在我们来告诉IDE要链接什么?一般都在Project选项里面。
嗯,CodeBlock有一个Build Option选项,似乎是,看一下吧。
噢,里面有一个Linker选项,可以添加一些链接的库,这样我们就可以添加进我们的库了。
因为我们已经把路径加进了lib路径里面,这样我们就可以直接的指定库的名称就可以了,例如wpcap。
查了一下标准C还支持一种#pragma的预处理指令,可以加载指定的库,可是在CodeBlock里面就是不行,这是郁闷。在VC里面使用就可以使用,不用在Project里面进行设定
#pragma comment(lib,"wpcap")