ACE应用程序链接错误  error LNK2019 的解决办法 
 
		读者水平:初级 
摘要:文本简要指出如何正确编译和链接ACE应用程序。
		对于新手来说,ACE开发环境,会是一团谜团,如何正确配置开发者机器,快速体验ACE,
就是本系列文章的目的。本文仅解决如何解决LNK2019错误
		环境:
  
		
				
				   ACE版本 5.5.1
     操作系统 Windows xp professional sp2
     开发环境 Microsoft Visual C++ 2005   77626-009-0000007-41235



		 
		下面的代码是服务的主程序
		
				//
				@file: RegisterServer.cpp :
				//
				@description: Defines the entry point for the GameService Daemon application.
				//
				@date: 2006-07-06
				//
				@author: Jiangtao<2005119@gmail.com>
				
						
				
				#ifdef _DEBUG
				#define
				   ACE_NDEBUG 0
				
						
				
				#define
				   ACE_NTRACE 0
				
						
				
				#endif
				
						
#include 
				"
				stdafx.h
				"
				
						
#include 
				"
				ACE/Filecache.h
				"
				
						
#include 
				"
				ACE/Log_Msg.h
				"
				
						
#include 
				"
				ACE/OS_NS_signal.h
				"
				
						
#include 
				"
				ACE/Service_Config.h
				"
				
						
						
#ifdef ACE_HAS_SIG_C_FUNC
#pragma message (
				"
				ACE_HAS_SIG_C_FUNC
				"
				)
				extern
				 
				"
				C
				"
				
						
{
				#endif
				 /* ACE_HAS_SIG_C_FUNC */
				
						
						
 
				//
				 call exit() so that static destructors get called
				
						
				
				 
				static
				 
				void
				
						
  handler (
				int
				)
 {
  delete (ACE_Filecache 
				*
				) ACE_Filecache::instance ();
  ACE_OS::exit (
				0
				);
 }
#ifdef ACE_HAS_SIG_C_FUNC
}
				#endif
				 /* ACE_HAS_SIG_C_FUNC */
				
						
						
				
				int
				 ACE_TMAIN(
				int
				 argc, ACE_TCHAR
				*
				 argv[])
{
 ACE_DEBUG((LM_INFO,ACE_TEXT(
				"
				启动服务\n
				"
				)));
 ACE_Service_Config daemon;
 ACE_OS::signal (SIGCHLD, SIG_IGN);
 
				//
				 SigAction not needed since the handler will shutdown the server.
				
						
				
				 ACE_OS::signal (SIGINT, (ACE_SignalHandler) handler);
 ACE_OS::signal (SIGUSR2, (ACE_SignalHandler) handler);
 
				if
				 (daemon.open (argc, argv, ACE_DEFAULT_LOGGER_KEY, 
				0
				) 
				!=
				 
				0
				)
  ACE_ERROR_RETURN ((LM_ERROR, 
				"
				%p\n
				"
				, 
				"
				open
				"
				), 
				1
				);
 
				//
				 The configured service creates threads, and the
 
				//
				 server won't exit until the threads die.
 
				//
				 Run forever, performing the configured services until we receive
 
				//
				 a SIGINT.
				
						
				
				
						
 
				return
				 
				0
				;
}
		 
		服务加载的配置文件
		 
		
				
				
						
						
###############################################################################
# file svc.conf
###############################################################################

dynamic GameService Service_Object 
				*
				 GameService: _make_GameServer_T() active 
		 
		 
		
				
出错提示:
		 
		
				
				----- Build started: Project: RegisterServer, Configuration: Debug Win32 ------
Compiling
RegisterServer.cpp
Linking
RegisterServer.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) int __cdecl ace_os_wmain_i(class ACE_Main_Base &,int,wchar_t * * const)" (__imp_?ace_os_wmain_i@@YAHAAVACE_Main_Base@@HQAPA_W@Z) referenced in function _wmain
RegisterServer.obj : error LNK2019: unresolved external symbol "__declspec(dllimport) public: static int __cdecl ACE_Service_Config::open(int,wchar_t * * const,wchar_t const *,int,int,int)" (__imp_?open@ACE_Service_Config@@SAHHQAPA_WPB_WHHH@Z) referenced in function "int __cdecl ace_wmain_i(int,wchar_t * * const)" (?ace_wmain_i@@YAHHQAPA_W@Z)
D:\ACE_OUTPUT\Game\\RegisterServerd.exe : fatal error LNK1120: 2 unresolved externals
Build log was saved at "file://d:\My Sources\RegisterService\RegisterServer\Debug\BuildLog.htm"
RegisterServer - 3 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 1 up-to-date, 0 skipped ==========
		 
		 
		问题分析
出错信息显示,不能解析函数ace_os_wmain_i()以及  ACE_Service_Config::open()。
从这里可以看出,链接器需要UNICODE版本的ace库,而我们在生成ACE的时候,并没有生成宽字符
的UNICODE版本。
		解决办法:
打开项目的属性页,找到配置属性,在字符集中,选择多字节字符集。再重新编译,问题解决。