error LNK2001: unresolved external symbol __imp__

来源:互联网 发布:淘宝买到二手货怎么办 编辑:程序博客网 时间:2024/06/07 07:19

  这是一个很常见的链接错误,像下面链接错误是因为找不到win32下面网络通信的库,因为这个库不常用,所以VC默认是不加载的:

 

MyClient.obj : error LNK2001: unresolved external symbol __imp__WSACleanup@0
MyClient.obj : error LNK2001: unresolved external symbol __imp__send@16
MyClient.obj : error LNK2001: unresolved external symbol __imp__recv@16
MyClient.obj : error LNK2001: unresolved external symbol __imp__connect@12
MyClient.obj : error LNK2001: unresolved external symbol __imp__htons@4
MyClient.obj : error LNK2001: unresolved external symbol __imp__closesocket@4
MyClient.obj : error LNK2001: unresolved external symbol __imp__gethostbyaddr@12
MyClient.obj : error LNK2001: unresolved external symbol __imp__gethostbyname@4
MyClient.obj : error LNK2001: unresolved external symbol __imp__inet_addr@4
MyClient.obj : error LNK2001: unresolved external symbol __imp__socket@12
MyClient.obj : error LNK2001: unresolved external symbol __imp__WSAStartup@8
Debug/MyClient.exe : fatal error LNK1120: 11 unresolved externals

 

有两种方法加入lib库。

第一种方法:

如本例,应在Link里加入ws2_32.lib。否则编译器无从寻找相应函数。

 

第二种方法:

显示指定编译器链接某特定库的办法是:

#pragma comment(lib,"ws2_32.lib")

其实ws2_32.lib是这个我要链接的库,如果你需要链接test.lib,方法是:

#pragma comment(lib,"test.lib")

特定库的找到办法是看LNK2001中找不到的函数名,通过msdn或者其他手段获取这个函数所在的库名,链接进去就OK了。

 

第二种方法的移植性会好一些,因为第一种方法的库链接信息是记录在工程文件里面的。

 

原创粉丝点击