关于 error LNK2019 无法解析的外部符号

xiaochangcong123 2012-05-22 05:22:26
首先,我在网上找到了很多关于这类型错误的博客什么之类的。我也看了一下,但是问题还未解决。
源代码如下:

#ifdef _MSC_VER
//*
// * we do not want the warnings about the old deprecated and unsecure CRT functions
// * since these examples can be compiled under *nix as well
// */
#define _CRT_SECURE_NO_WARNINGS
#endif

#include "pcap.h"

#ifndef WIN32
#include <sys/socket.h>
#include <netinet/in.h>
#else
#include <winsock.h>
#endif

// Function prototypes
void ifprint(pcap_if_t *d);
char *iptos(u_long in);
char* ip6tos(struct sockaddr *sockaddr, char *address, int addrlen);

int main()
{
pcap_if_t *alldevs;
pcap_if_t *d;
char errbuf[PCAP_ERRBUF_SIZE+1];

/* Retrieve the device list */
if(pcap_findalldevs(&alldevs, errbuf) == -1)
{
fprintf(stderr,"Error in pcap_findalldevs: %s\n", errbuf);
exit(1);
}

/* Scan the list printing every entry */
for(d=alldevs;d;d=d->next)
{
ifprint(d);
}

/* Free the device list */
pcap_freealldevs(alldevs);

return 1;
}

/* Print all the available information on the given interface */
void ifprint(pcap_if_t *d)
{
pcap_addr_t *a;
char ip6str[128];

/* Name */
printf("%s\n",d->name);

/* Description */
if (d->description)
printf("\tDescription: %s\n",d->description);

/* Loopback Address*/
printf("\tLoopback: %s\n",(d->flags & PCAP_IF_LOOPBACK)?"yes":"no");

/* IP addresses */
for(a=d->addresses;a;a=a->next) {
printf("\tAddress Family: #%d\n",a->addr->sa_family);

switch(a->addr->sa_family)
{
case AF_INET:
printf("\tAddress Family Name: AF_INET\n");
if (a->addr)
printf("\tAddress: %s\n",iptos(((struct sockaddr_in *)a->addr)->sin_addr.s_addr));
if (a->netmask)
printf("\tNetmask: %s\n",iptos(((struct sockaddr_in *)a->netmask)->sin_addr.s_addr));
if (a->broadaddr)
printf("\tBroadcast Address: %s\n",iptos(((struct sockaddr_in *)a->broadaddr)->sin_addr.s_addr));
if (a->dstaddr)
printf("\tDestination Address: %s\n",iptos(((struct sockaddr_in *)a->dstaddr)->sin_addr.s_addr));
break;

case AF_INET6:
printf("\tAddress Family Name: AF_INET6\n");
#ifndef __MINGW32__ /* Cygnus doesn't have IPv6 */
if (a->addr)
printf("\tAddress: %s\n", ip6tos(a->addr, ip6str, sizeof(ip6str)));
#endif
break;

default:
printf("\tAddress Family Name: Unknown\n");
break;
}
}
printf("\n");
}

/* From tcptraceroute, convert a numeric IP address to a string */
#define IPTOSBUFFERS 12
char *iptos(u_long in)
{
static char output[IPTOSBUFFERS][3*4+3+1];
static short which;
u_char *p;

p = (u_char *)∈
which = (which + 1 == IPTOSBUFFERS ? 0 : which + 1);
sprintf(output[which], "%d.%d.%d.%d", p[0], p[1], p[2], p[3]);
return output[which];
}

#ifndef __MINGW32__ /* Cygnus doesn't have IPv6 */
char* ip6tos(struct sockaddr *sockaddr, char *address, int addrlen)
{
socklen_t sockaddrlen;

#ifdef WIN32
sockaddrlen = sizeof(struct sockaddr_in6);
#else
sockaddrlen = sizeof(struct sockaddr_storage);
#endif

if(getnameinfo(sockaddr,
sockaddrlen,
address,
addrlen,
NULL,
0,
NI_NUMERICHOST) != 0) address = NULL;

return address;
}
#endif /* __MINGW32__ */



我用VS2010调试出现的问题下:
错误 1 error LNK2019: 无法解析的外部符号 _pcap_freealldevs,该符号在函数 _main 中被引用
错误 2 error LNK2019: 无法解析的外部符号 _pcap_findalldevs,该符号在函数 _main 中被引用
错误 3 error LNK2019: 无法解析的外部符号 __imp__getnameinfo@28,该符号在函数 "char * __cdecl ip6tos(struct sockaddr *,char *,int)" (?ip6tos@@YAPADPAUsockaddr@@PADH@Z) 中被引用
错误 4 error LNK1120: 3 个无法解析的外部命令


说明,此程序要安装Wincap4_1_2 以及相关sdk开发包。


谢谢各位大神了!
...全文
1218 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
贲于丘园 2014-09-24
  • 打赏
  • 举报
回复
已解决问题,感谢!
xiaochangcong123 2012-05-22
  • 打赏
  • 举报
回复
额~最近被各种各样的事情搞得太乱了。
导致昨晚鼓捣了好久没成。
纠结了好久~


现在已解决了。
将开发包中的库文件放到VS相应的安装目录下
然后在程序中加入
#pragma comment(lib,"wpcap.lib")
#pragma comment(lib,"ws2_32.lib")

//wpcap.lib ws2_32.lib包含 在开发包中

谢谢。

另外,各位能否说说VS08以及以前版本中对IPV6地址的支持,该怎么解决呢

君记否 2012-05-22
  • 打赏
  • 举报
回复
你没包含相应版本的lib文件
xiaohuh421 2012-05-22
  • 打赏
  • 举报
回复
1.可能是对应的库没有包含到工程中.
2.库版本不对,没有_pcap_freealldevs或者参数不匹配.所以link是查不到.

65,186

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧