ACE应用程序链接错误 error LNK2019 的解决办法
读者水平:初级
摘要:文本简要指出如何正确编译和链接ACE应用程序。
对于新手来说,ACE开发环境,会是一团谜团,如何正确配置开发者机器,快速体验ACE,
就是本系列文章的目的。本文仅解决如何解决LNK2019错误
环境:
ACE版本5.5.1
操作系统Windowsxpprofessionalsp2
开发环境MicrosoftVisualC++200577626-009-0000007-41235
下面的代码是服务的主程序
// @file:RegisterServer.cpp:
// @description:DefinestheentrypointfortheGameServiceDaemonapplication.
// @date:2006-07-06
// @author:Jiangtao<2005119@gmail.com>
#ifdef_DEBUG
#define ACE_NDEBUG0
#define ACE_NTRACE0
#endif
#include " stdafx.h "
#include " ACE/Filecache.h "
#include " ACE/Log_Msg.h "
#include " ACE/OS_NS_signal.h "
#include " ACE/Service_Config.h "
#ifdefACE_HAS_SIG_C_FUNC
#pragmamessage( " ACE_HAS_SIG_C_FUNC " )
extern " C "
{
#endif /*ACE_HAS_SIG_C_FUNC*/
// callexit()sothatstaticdestructorsgetcalled
static void
handler( int )
{
delete(ACE_Filecache * )ACE_Filecache::instance();
ACE_OS::exit( 0 );
}
#ifdefACE_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_Configdaemon;
ACE_OS::signal(SIGCHLD,SIG_IGN);
// SigActionnotneededsincethehandlerwillshutdowntheserver.
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 );
// Theconfiguredservicecreatesthreads,andthe
// serverwon'texituntilthethreadsdie.
// Runforever,performingtheconfiguredservicesuntilwereceive
// aSIGINT.
return 0 ;
}
服务加载的配置文件
###############################################################################
#filesvc.conf
###############################################################################
dynamicGameServiceService_Object * GameService:_make_GameServer_T()active
出错提示:
-----Buildstarted:Project:RegisterServer,Configuration:DebugWin32------
Compiling
RegisterServer.cpp
Linking
RegisterServer.obj:errorLNK2019:unresolvedexternalsymbol"__declspec(dllimport)int__cdeclace_os_wmain_i(classACE_Main_Base&,int,wchar_t**const)"(__imp_?ace_os_wmain_i@@YAHAAVACE_Main_Base@@HQAPA_W@Z)referencedinfunction_wmain
RegisterServer.obj:errorLNK2019:unresolvedexternalsymbol"__declspec(dllimport)public:staticint__cdeclACE_Service_Config::open(int,wchar_t**const,wchar_tconst*,int,int,int)"(__imp_?open@ACE_Service_Config@@SAHHQAPA_WPB_WHHH@Z)referencedinfunction"int__cdeclace_wmain_i(int,wchar_t**const)"(?ace_wmain_i@@YAHHQAPA_W@Z)
D:\ACE_OUTPUT\Game\\RegisterServerd.exe:fatalerrorLNK1120:2unresolvedexternals
Buildlogwassavedat"file://d:\MySources\RegisterService\RegisterServer\Debug\BuildLog.htm"
RegisterServer-3error(s),0warning(s)
==========Build:0succeeded,1failed,1up-to-date,0skipped==========
问题分析
出错信息显示,不能解析函数ace_os_wmain_i()以及 ACE_Service_Config::open()。
从这里可以看出,链接器需要UNICODE版本的ace库,而我们在生成ACE的时候,并没有生成宽字符
的UNICODE版本。
解决办法:
打开项目的属性页,找到配置属性,在字符集中,选择多字节字符集。再重新编译,问题解决。
分享到:
相关推荐
在VC++编程环境中,当你遇到"error LNK2019: 无法解析的外部符号"的错误时,这通常意味着编译器在链接阶段找不到某个函数或变量的定义。这个错误是链接器(Linker)发出的,因为它在已编译的对象文件或库中找不到在...
错误 LNK2019 是一个常见的链接器错误,在Visual Studio等C++开发环境中经常会遇到。这个错误通常意味着编译器在链接阶段找不到某个函数或变量的定义,即在对象文件或库中没有对应的实现。这通常是由于以下原因引起...
本文将详细解析两个特定的链接错误:error LNK1120和error LNK2001,这两种错误通常发生在Visual Studio等IDE中。通过了解这些错误的含义和解决方法,我们可以更有效地调试和优化代码。 首先,让我们来看看**error ...
LNK2019错误是Microsoft Visual Studio 2008 (VS2008)在编译和链接过程中常见的一个链接器错误,通常表示在编译的目标代码中引用了一个未解析的外部符号,也就是说,链接器无法找到该符号在任何输入对象文件或库中的...
在MFC程序中调用ODBC API时,可能会遇到error LNK2001: unresolved external symbol的错误,这是因为缺少了ODBC32.LIB库文件的原因。 三、解决error LNK2001: unresolved external symbol在OpenCV图像处理编程中 ...
### vc中error LNK2001 resolved external symbol _WinMain@16的解决方法...通过以上步骤,可以有效地解决`error LNK2001: unresolved external symbol _WinMain@16`的问题,并确保Windows应用程序能够正常编译和运行。
在编程过程中,我们时常会遇到各种链接错误,其中"LNK2019: 无法解析的外部符号"是Visual Studio C++编译器中一个常见的错误,这通常发生在链接阶段,意味着编译器找不到在编译时声明但在链接时没有实现的函数或变量...
LNK2019错误是Windows平台下使用Microsoft Visual Studio进行C++项目编译时常遇到的链接错误。当编译器在尝试生成可执行文件时,会在链接阶段发现一些函数或变量的引用无法找到它们的定义,就会产生LNK2019错误。这...
解决报错LINK : fatal error LNK1000补丁 返回错误:LINK : fatal error LNK1000: Internal error during IncrBuildImage
在编程过程中,我们时常会遇到编译错误,其中"error LNK2001 无法解析的外部符号"是一个常见的链接器错误。这个错误通常发生在C++编程中,特别是当你试图使用一个未定义的函数或者变量时。在这个特定的情况下,错误...
完美解决VS2003.Net fatal error LNK1201: 写入程序数据库“.pdb”时出错 文末给出一个完美的解决方案和一个懒人补丁包。问题描述如下:在重新编译的时候,经常报错: fatal error LNK1201: 写入程序数据库“.pdb”...
解决报错Error LNK2001:unresolved external symbol
使用vs2015开发c++win32项目时,用MySQL-Connector/c++连接MySQL时总是出现error: LNK2019错误 错误原因可能为: 1、缺少相应的库文件; 2、项目平台和所引用的第三方SDK不一致,即32bit对应引用了64bit,64bit对应...
对于 fatal error LNK1123: failure during conversion to COFF错误,网上很多都是说把什么“是”改成“否”,其实都是治标不治本。这里有个链接,让你清楚知道为啥出错,怎么解决。记得保留哦~
每次编译链接的时候都会出现LNK1000,Increment linker已停止工作的问题,刚开始的时候只是简单的在开发环境里设置了一下不启用增量链接,后来一个工具完成之后在网上搜了一下,发现这是微软的一个BUG,需要下载安装...
error LNK2005: DllMain already defined in corelibc.lib(dllmain.obj)的解决方案
在开发过程中,Visual Studio 2008(VS2008)的用户可能会遇到一个棘手的问题,即“LINK fatal error LNK1000:IncrBuildImage 内部错误”。这个错误通常出现在尝试编译或链接项目时,会阻止程序的正常构建。下面...
解决安装vs2012后vs2010 LINK : fatal error LNK1123: failure during conversion to COFF Wrong version: 03/18/2010 01:16 PM 31,048 cvtres.exe Correct version: 02/21/2011 06:03 PM 31,056 cvtres.exe
标题中的“error LNK2005 void __cdecl operator delete(void)”是一个常见的链接错误,它在C++编程中出现,通常涉及到多库编译时的符号重定义问题。这个错误表明在链接阶段发现了一个重复定义的`operator delete`...