SOCKET的问题

wyyhzcflying 2004-11-18 07:15:11
我在编译时遇到了以下几个问题,我看了帮助了,但是列出的可能性太多,我也不知如何下手,把代码检查了又好像没什么问题似的(肯定有问题),像这种情况一般从哪下手呢?请求各位大虾帮忙!问题解决了就给分,兄弟分不多,没法拿这么多分来感谢大家!
hatRoomDlg.obj : error LNK2001: unresolved external symbol _closesocket@4
Client.obj : error LNK2001: unresolved external symbol _closesocket@4
Server.obj : error LNK2001: unresolved external symbol _closesocket@4
ChatRoomDlg.obj : error LNK2001: unresolved external symbol _recv@16
Client.obj : error LNK2001: unresolved external symbol _recv@16
ChatRoomDlg.obj : error LNK2001: unresolved external symbol _send@16
Client.obj : error LNK2001: unresolved external symbol _send@16
ChatRoomDlg.obj : error LNK2001: unresolved external symbol _accept@12
Client.obj : error LNK2001: unresolved external symbol _connect@12
Client.obj : error LNK2001: unresolved external symbol _htons@4
Server.obj : error LNK2001: unresolved external symbol _htons@4
Client.obj : error LNK2001: unresolved external symbol _inet_addr@4
Client.obj : error LNK2001: unresolved external symbol _socket@12
Server.obj : error LNK2001: unresolved external symbol _socket@12
Client.obj : error LNK2001: unresolved external symbol _WSAAsyncSelect@16
Server.obj : error LNK2001: unresolved external symbol _WSAAsyncSelect@16
Server.obj : error LNK2001: unresolved external symbol _listen@8
Server.obj : error LNK2001: unresolved external symbol _bind@12
Debug/ChatRoom.exe : fatal error LNK1120: 11 unresolved externals
Error executing link.exe.

ChatRoom.exe - 19 error(s), 0 warning(s)
...全文
102 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
wyyhzcflying 2004-11-20
  • 打赏
  • 举报
回复
非常感谢楼上的几位大虾,特别是steedhorse(星辰),分我都加给几位了,再次谢谢!
晨星 2004-11-20
  • 打赏
  • 举报
回复
说错一句话:“注意还有另一种lib,里面不仅包含程序,还包含源代码”,应该为:“里面不仅包含入口地址,还包含实现的二进制代码。”,这种lib自身包含了所有的可执行代码,不在需要对应另外的dll。
晨星 2004-11-19
  • 打赏
  • 举报
回复
头文件中只有相关函数的声明,所以只能解决“编译”时的问题,因为在编译期,编译器知道有那么个函数,并知道它的返回值、参数的详细信息就可以顺利完成编译,因为C/C++语言是分模块编译的。

但到了链接时就不行了,这个时候要动真格的了:所有的函数入口都要到位,否则即使能“链接”出一个东西,也肯定不能运行。所以,此时就需要知道所有的函数的入口信息。函数的入口信息分成两类,一类时你自己工程中的自己写的那些函数,包括全局函数和类的成员函数,这些都在存在于编译器刚刚把你的源程序编成的obj文件中,好找。而另外一些,存在于系统的dll文件中,这些有两种方法可以找到,一种是通过LoadLibary动态的装载,另一种就是通过lib文件,因为这类lib文件中就包含着相关的函数所在的dll,以及在其中的入口地址,于是链接器就可以利用这些信息来结合工程里的那些obj文件最终做出一个可执行的程序。(注意还有另一种lib,里面不仅包含程序,还包含源代码,如C语言运行时库libc.lib)。

此外,不仅仅是WinSock库,你用到的任何运行时函数、系统API、MFC库或者其他第三方库里的函数都需要加入相关的lib,除非你有源代码。只是VC有默认的设置,通常那些常用的lib会自动加入到工程中,比如说,如果你设置工程需要MFC支持,那么与MFC相关的库就会加入到工程设置中。这也是为什么你的工程刚建立时,工程设置中便已经有了好多lib文件加入。但WinSock库缺不是默认设置的,因为并不是每个程序都需要用到Windows Socket,所以VC把这个库的加入或不加入的权力留给了用户。
wyyhzcflying 2004-11-18
  • 打赏
  • 举报
回复
我加了WINSOCK.H头文件了,光是这样还不行吗?
一定要再要添加WS2_32.LIB吗?哪位大虾能解释一下?谢谢!
mynamelj 2004-11-18
  • 打赏
  • 举报
回复
在连接里添加ws2_32.lib
sharkhuang 2004-11-18
  • 打赏
  • 举报
回复
连接Ws2_32.lib
gdy119 2004-11-18
  • 打赏
  • 举报
回复
头文件中加:
#pragma comment(lib,"Ws2_32.lib")
晨星 2004-11-18
  • 打赏
  • 举报
回复
记着左边上面的下拉框选择“All Configurations”。
晨星 2004-11-18
  • 打赏
  • 举报
回复
“Project/Settings/Link/Object library module”中添加“ws2_32.lib”
Kudeet 2004-11-18
  • 打赏
  • 举报
回复
#include <afxsock.h> 加wsock32.lib

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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