在书的P67  第3。7节的示例中的    
extern  char*  get_url_pathname(ACE_SOCK_Stream  *);  
函数是那里冒出来的  
 
我按照书中提供的ACE-INSTALL.html提供的步骤配置的ACE的环境。其他的示例都可以正常的编译运行。  
而运行该节的程序时却遇到问题,编译器的提示如下:  
main.obj  :  error  LNK2019:  无法解析的外部符号  "char  *  __cdecl  get_url_pathname(class  ACE_SOCK_Stream  *)"  (?get_url_pathname@@YAPADPAVACE_SOCK_Stream@@@Z)  ,该符号在函数  "int  __cdecl  ace_main_i(int,char  *  *  const)"  (?ace_main_i@@YAHHQAPAD@Z)  中被引用  
Debug/ACEServer.exe  :  fatal  error  LNK1120:  1  个无法解析的外部命令  
 
---------------  
程序如下:  
 
#include  "ace/Auto_Ptr.h"  
#include  "ace/INET_Addr.h"  
#include  "ace/SOCK_Acceptor.h"  
#include  "ace/SOCK_Stream.h"  
#include  "ace/Mem_Map.h"  
 
extern  char*  get_url_pathname(ACE_SOCK_Stream  *);  
 
int  main(int  argc,  char*  argv[])  
{  
           ACE_INET_Addr  server_addr;  
           ACE_SOCK_Acceptor  acceptor;  
           ACE_SOCK_Stream  peer;  
 
           if  (server_addr.set  (80)  ==  -1)    
                       return  1;  
 
           if  (acceptor.open  (server_addr)  ==  -1)  
                       return  1;  
 
           for(  ;  ;  )  
           {  
                       if  (acceptor.accept(peer)  ==  -1)  
                                   return  1;  
                       peer.disable  (ACE_NONBLOCK);  
                         
                       ACE_Auto_Array_Ptr  <char>  pathname(get_url_pathname(&peer));  
                       ACE_Mem_Map  mapped_file  (pathname.get());  
 
                       if  (peer.send_n  (mapped_file.addr  (),  mapped_file.size  ())  ==  -1)  
                                   return  1;  
                       peer.close();  
           }  
 
           return  acceptor.close()  ==  -1  ?  1  :  0;  
}  
--------------------------------  
敬请各位指点,谢谢。  
http://community.csdn.net/Expert/topic/3997/3997893.xml?temp=.8427698

解决方案 »

  1.   

    Hi weiziyuner,
    从函数声明来看,这是一个例子中自定义的一个函数,
    因为ACE并不提供这种类型的全局函数(其全局函数均使用Wrapper 模式进行类封装),你可以注意一下是否有别的cpp没有包括在工程中。
    extern  char*  get_url_pathname(ACE_SOCK_Stream  *); 另外,从例子来看这个函数的如何实现并不是重点,可以随意返回一个串,并不影响例子的示范作用。
      

  2.   

    to ydogg(灰毛兔频频)
       好像并非如此,因为作者在上文中已经提到,get_url_pathname(ACE_SOCK_Stream *stream)函数是要获取stream连接中客户请求的url。
       这个函数要自己写么?,那为什么要用 extern  呢?
      

  3.   

    to weiziyuner,
    我的意思很明确,就是这个函数是不影响例子的示范作用,原因我已经提及。
    该例子的目的是为了演示SOCK_Acceptor的使用,而非别的,get_url_pathname的返回值只是被简单的写入了一个文件
      

  4.   

    to ydogg(灰毛兔频频)
       你得意思是说这个例子只是一个示范用得例子么?