操作系统 WINDOWS XP
环境 VC 6.0
源码:(照着计算机网络与因特网第26章摘抄的)#include <windows.h>
#include <winsock.h>#include <stdio.h>
#include <string.h>
#define PROTA 5193
main()
{
  int port;
  struct sockaddr_in sad;
  #ifdef WIN32
     WSADATA wsaData;
 WSAStartup(0x0101,&wsaData);
  #endif
 port = PROTA;
 sad.sin_port = htons((u_short)port);
}
编译能通过。链接的时候出现以下问题:
lint.obj : error LNK2001: unresolved external symbol _htons@4
clint.obj : error LNK2001: unresolved external symbol _WSAStartup@8
Debug/clint.exe : fatal error LNK1120: 2 unresolved externals 
问题:
1 什么原因导致了这个错误
2 问下symbol _htons@4,_WSAStartup@8里的@4和@8是什么意思?(对这个确实不懂~~~)备注:1.文件是C文件。
      2.用的是CONSOLE

解决方案 »

  1.   

    什么教材啊,这么旧, #include 下面加个,winsock编程都要这个的
    #pragma comment(lib, "ws2_32.lib")
      

  2.   

    ALT+F7
    link选项里面添加上Ws2_32.lib或者楼上老大的办法.
      

  3.   

    你用了winsock2.h里面的库函数,但是你没有告诉连接器应该加载的com库,楼上的2中方法都对。
      

  4.   

    在问下,关于Ws2_32.lib的介绍,哪里比较详细了?
    他是DLL的导出文件还是静态库了?还有symbol _htons@4,_WSAStartup@8里的@4和@8是什么意思?
      

  5.   

    1. WS2.32.lib--是共享的动态库导入文件,根据系统才能引导导入.DLL文件,就和数据库的lib作用文件差不多。
    2. 至于symbol _htons@4,_WSAStartup@8里面的那个符号是无意义的,这是c++的名字改编,系统随即加上的,目的是为了区分同名标识符(像函数的重载) 名字改编在C语言里面是没有的,只存在在c++里面。