看过《C++网络编程 卷1 》运用ACE和模式消除复杂性!
在书的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;
}
--------------------------------
敬请各位指点,谢谢。