ACE应用程序链接错误 error LNK2019 的解决办法

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版本。

解决办法:
打开项目的属性页,找到配置属性,在字符集中,选择多字节字符集。再重新编译,问题解决。

 
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值