ACE链接失败一分析 例

有网友问到,他在链接的时候,产生一堆错误

我们还是先看他的代码吧.
 1 //  acetest2.cpp : Defines the entry point for the console application.
 2 //
 3
 4 //  client.cpp
 5
 6 #include  " ace/OS_main.h "
 7 #include  " ace/OS_NS_string.h "
 8 #include  " ace/OS_NS_sys_socket.h "
 9 #include  " ace/OS_NS_unistd.h "
10 #include  " ace/OS_NS_stdlib.h "
11 #include  " ace/OS_NS_stdio.h "
12 #include  " ace/OS_NS_netdb.h "
13 #include  " ace/Default_Constants.h "
14
15 ACE_RCSID(SOCK_SAP, client,  " client.cpp,v 4.10 2005/01/21 02:19:20 ossama Exp " )
16
17 /* BSD socket client */
18
19 int
20 ACE_TMAIN ( int  argc, ACE_TCHAR  * argv[])
21 {
22  // Initialize WinSock DLL on Win32
23  ACE_OS::socket_init (ACE_WSOCK_VERSION);
24
25  struct sockaddr_in saddr;
26  struct hostent *hp;
27  const ACE_TCHAR *host = argc > 1 ? argv[1] : ACE_DEFAULT_SERVER_HOST;
28  u_short port_num =
29    htons (argc > 2 ? ACE_OS::atoi (argv[2]) : ACE_DEFAULT_SERVER_PORT);
30  int sockbufsize = argc > 3 ? ACE_OS::atoi (argv[3]) : 0;
31  char buf[BUFSIZ];
32  ACE_HANDLE s_handle;
33  int w_bytes;
34  int r_bytes;
35  int n;
36
37  // Create a local endpoint of communication.
38  if ((s_handle = ACE_OS::socket (PF_INET, SOCK_STREAM, 0)) == ACE_INVALID_HANDLE)
39    ACE_OS::perror (ACE_TEXT("socket")), ACE_OS::exit (1);
40
41  // If a sockbufsize was specified, set it for both send and receive.
42  if (sockbufsize > 0)
43  {
44    if (ACE_OS::setsockopt (s_handle, SOL_SOCKET, SO_SNDBUF,
45      (const char *&sockbufsize,
46      sizeof (sockbufsize)) != 0)
47      ACE_OS::perror (ACE_TEXT("SO_SNDBUF")), ACE_OS::exit (1);
48    if (ACE_OS::setsockopt (s_handle, SOL_SOCKET, SO_RCVBUF,
49      (const char *&sockbufsize,
50      sizeof (sockbufsize)) != 0)
51      ACE_OS::perror (ACE_TEXT("SO_RCVBUF")), ACE_OS::exit (1);
52  }

53
54  // Determine IP address of the server.
55  if ((hp = ACE_OS::gethostbyname (ACE_TEXT_ALWAYS_CHAR(host))) == 0)
56    ACE_OS::perror (ACE_TEXT("gethostbyname")), ACE_OS::exit (1);
57
58  // Set up the address information to contact the server.
59  ACE_OS::memset ((void *&saddr, 0sizeof saddr);
60  saddr.sin_family = AF_INET;
61  saddr.sin_port = port_num;
62  ACE_OS::memcpy (&saddr.sin_addr, hp->h_addr, hp->h_length);
63
64  // Establish connection with remote server.
65  if (ACE_OS::connect (s_handle,
66    reinterpret_cast<sockaddr *> (&saddr),
67    sizeof saddr) == -1)
68    ACE_OS::perror (ACE_TEXT("connect")), ACE_OS::exit (1);
69
70  // Send data to server (correctly handles "incomplete writes" due to
71  // flow control).
72
73  while ((r_bytes = ACE_OS::read (ACE_STDIN, buf, sizeof buf)) > 0)
74    for (w_bytes = 0; w_bytes < r_bytes; w_bytes += n)
75      if ((n = ACE_OS::send (s_handle, buf + w_bytes,
76        r_bytes - w_bytes)) < 0)
77        ACE_OS::perror (ACE_TEXT("write")), ACE_OS::exit (1);
78
79  if (ACE_OS::recv (s_handle, buf, 1== 1)
80    ACE_OS::write (ACE_STDOUT, buf, 1);
81
82  // Explicitly close the connection.
83  if (ACE_OS::closesocket (s_handle) == -1)
84    ACE_OS::perror (ACE_TEXT("close")), ACE_OS::exit (1);
85  return 0;
86}

87
88
89

直接编译,产生如下错误
------  Build started: Project: acetest2, Configuration: Debug Win32  ------

Compiling
acetest2.cpp
Linking
acetest2.obj : error LNK2019: unresolved external symbol 
" __declspec(dllimport) int __cdecl ace_os_main_i(class ACE_Main_Base &,int,char * * const) "  (__imp_ ? ace_os_main_i@@YAHAAVACE_Main_Base@@HQAPAD@Z) referenced  in  function _main
acetest2.obj : error LNK2019: unresolved external symbol 
" __declspec(dllimport) public: __thiscall ACE_Main_Base::ACE_Main_Base(void) "  (__imp_ ?? 0ACE_Main_Base@@QAE@XZ) referenced  in  function  " public: __thiscall ACE_Main::ACE_Main(void) "  ( ?? 0ACE_Main@@QAE@XZ)
acetest2.obj : error LNK2019: unresolved external symbol 
" __declspec(dllimport) int __cdecl ACE_OS::closesocket(void *) "  (__imp_ ? closesocket@ACE_OS@@YAHPAX@Z) referenced  in  function  " int __cdecl ace_main_i(int,char * * const) "  ( ? ace_main_i@@YAHHQAPAD@Z)
acetest2.obj : error LNK2019: unresolved external symbol 
" __declspec(dllimport) int __cdecl ACE_OS::write(void *,void const *,unsigned int) "  (__imp_ ? write@ACE_OS@@YAHPAXPBXI@Z) referenced  in  function  " int __cdecl ace_main_i(int,char * * const) "  ( ? ace_main_i@@YAHHQAPAD@Z)
acetest2.obj : error LNK2019: unresolved external symbol 
" __declspec(dllimport) int __cdecl ACE_OS::recv(void *,char *,unsigned int,int) "  (__imp_ ? recv@ACE_OS@@YAHPAXPADIH@Z) referenced  in  function  " int __cdecl ace_main_i(int,char * * const) "  ( ? ace_main_i@@YAHHQAPAD@Z)
acetest2.obj : error LNK2019: unresolved external symbol 
" __declspec(dllimport) int __cdecl ACE_OS::send(void *,char const *,unsigned int,int) "  (__imp_ ? send@ACE_OS@@YAHPAXPBDIH@Z) referenced  in  function  " int __cdecl ace_main_i(int,char * * const) "  ( ? ace_main_i@@YAHHQAPAD@Z)
acetest2.obj : error LNK2019: unresolved external symbol 
" __declspec(dllimport) int __cdecl ACE_OS::read(void *,void *,unsigned int) "  (__imp_ ? read@ACE_OS@@YAHPAX0I@Z) referenced  in  function  " int __cdecl ace_main_i(int,char * * const) "  ( ? ace_main_i@@YAHHQAPAD@Z)
acetest2.obj : error LNK2019: unresolved external symbol 
" __declspec(dllimport) int __cdecl ACE_OS::connect(void *,struct sockaddr *,int) "  (__imp_ ? connect@ACE_OS@@YAHPAXPAUsockaddr@@H@Z) referenced  in  function  " int __cdecl ace_main_i(int,char * * const) "  ( ? ace_main_i@@YAHHQAPAD@Z)
acetest2.obj : error LNK2019: unresolved external symbol 
" __declspec(dllimport) void * __cdecl ACE_OS::memcpy(void *,void const *,unsigned int) "  (__imp_ ? memcpy@ACE_OS@@YAPAXPAXPBXI@Z) referenced  in  function  " int __cdecl ace_main_i(int,char * * const) "  ( ? ace_main_i@@YAHHQAPAD@Z)
acetest2.obj : error LNK2019: unresolved external symbol 
" __declspec(dllimport) void * __cdecl ACE_OS::memset(void *,int,unsigned int) "  (__imp_ ? memset@ACE_OS@@YAPAXPAXHI@Z) referenced  in  function  " int __cdecl ace_main_i(int,char * * const) "  ( ? ace_main_i@@YAHHQAPAD@Z)
acetest2.obj : error LNK2019: unresolved external symbol 
" __declspec(dllimport) struct hostent * __cdecl ACE_OS::gethostbyname(char const *) "  (__imp_ ? gethostbyname@ACE_OS@@YAPAUhostent@@PBD@Z) referenced  in  function  " int __cdecl ace_main_i(int,char * * const) "  ( ? ace_main_i@@YAHHQAPAD@Z)
acetest2.obj : error LNK2019: unresolved external symbol 
" __declspec(dllimport) int __cdecl ACE_OS::setsockopt(void *,int,int,char const *,int) "  (__imp_ ? setsockopt@ACE_OS@@YAHPAXHHPBDH@Z) referenced  in  function  " int __cdecl ace_main_i(int,char * * const) "  ( ? ace_main_i@@YAHHQAPAD@Z)
acetest2.obj : error LNK2019: unresolved external symbol 
" __declspec(dllimport) void __cdecl ACE_OS::exit(int) "  (__imp_ ? exit@ACE_OS@@YAXH@Z) referenced  in  function  " int __cdecl ace_main_i(int,char * * const) "  ( ? ace_main_i@@YAHHQAPAD@Z)
acetest2.obj : error LNK2019: unresolved external symbol 
" __declspec(dllimport) void __cdecl ACE_OS::perror(char const *) "  (__imp_ ? perror@ACE_OS@@YAXPBD@Z) referenced  in  function  " int __cdecl ace_main_i(int,char * * const) "  ( ? ace_main_i@@YAHHQAPAD@Z)
acetest2.obj : error LNK2019: unresolved external symbol 
" __declspec(dllimport) void * __cdecl ACE_OS::socket(int,int,int) "  (__imp_ ? socket@ACE_OS@@YAPAXHHH@Z) referenced  in  function  " int __cdecl ace_main_i(int,char * * const) "  ( ? ace_main_i@@YAHHQAPAD@Z)
acetest2.obj : error LNK2019: unresolved external symbol 
" __declspec(dllimport) int __cdecl ACE_OS::atoi(char const *) "  (__imp_ ? atoi@ACE_OS@@YAHPBD@Z) referenced  in  function  " int __cdecl ace_main_i(int,char * * const) "  ( ? ace_main_i@@YAHHQAPAD@Z)
acetest2.obj : error LNK2019: unresolved external symbol 
" __declspec(dllimport) int __cdecl ACE_OS::socket_init(int,int) "  (__imp_ ? socket_init@ACE_OS@@YAHHH@Z) referenced  in  function  " int __cdecl ace_main_i(int,char * * const) "  ( ? ace_main_i@@YAHHQAPAD@Z)
Debug
/ acetest2.exe : fatal error LNK1120:  17  unresolved externals

解决方法,是正确的链接ace(x).lib
其中, release版对应的是ace.lib,debug对应的是aced.lib
同时,还要确保编辑器能正确找到ace(x).lib的位置.

简单的办法是加入下面的代码
#ifdef _DEBUG
#pragma  comment (lib,
" aced.lib " )
#else
#pragma  comment (lib,
" ace.lib " )
#endif

-------转载

原文地址 :
http://www.cppblog.com/mooyee/
 

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值