我试图实现在使用log4cplus C ++应用程序日志。 我能够成功地建立/链接(我加了log4cplus.lib我额外的库和复制log4cplus.dll到build / OUTDIR)
当我运行我的应用程序,我得到下面的异常时,执行我的记录器::调用的getInstance:
在LogTesterConsole.exe 0x75cad36f未处理的异常:微软C ++异常:性病:: bad_alloc的内存位置0x0013ed8c ..
我试图把我的外main()例程以及内部通话,并且具有相同的效果。
有任何想法吗?
码:-
#include "stdafx.h"
#include <log4cplus/logger.h>
#include <log4cplus/loggingmacros.h>
#include <log4cplus/configurator.h>
using namespace log4cplus;
int _tmain(int argc, _TCHAR* argv[])
{
BasicConfigurator config;
config.configure();
Logger logger = Logger::getInstance(LOG4CPLUS_TEXT("main"));
LOG4CPLUS_WARN(logger, LOG4CPLUS_TEXT("Hello, World!"));
return 0;
}
如果你正在构建中调试应用程序时,一定要链接到lib4CplusD.lib和lib4CplusD.dll。 同样,发布应用程序应该链接aginst lib4cplus.lib和lib4cplus.dll我有同样的运行时错误,当我联系我调试应用对调试库,问题就解决了。
尝试:-
int _tmain(int argc, _TCHAR* argv[])
{
PropertyConfigurator::doConfigure(LOG4CPLUS_TEXT("log4cplus.properties"));
Logger root = Logger::getRoot();
try{
Logger logger = Logger::getInstance(LOG4CPLUS_TEXT("main"));
}
catch(...) {
cout << "Exception..." << endl;
LOG4CPLUS_FATAL(root, "Exception occured...");
}
LOG4CPLUS_WARN(logger, LOG4CPLUS_TEXT("Hello, World!"));
return 0;
}
我知道这个帖子中有点老了,但我遇到相同问题时,我开始尝试log4cplus V2.0.0昨天。
答案很简单:这是一个调试/发布版本的问题。
现在任何人都可以repruduce较长的答案:
- 我下载log4cplus(V2.0.0)的最新稳定版本在这里
- 我运行结束在Visual Studio Soultuin在
./log4cplus-2.0.0/msvc14
与VS2017并提出了一个发布版本(Unicode)的log4cplus
-Project(Windows SDK的v10.0.16299.0;平台工具集V141)。 一切都制定了罚款。 - 我做了一个新的样本C ++ - 解决方案来尝试之前建立log4cplus。
- 安装程序使用log4cplus:
- 添加
log4cplusU.lib
作为一个额外的依赖于连接器 - 添加
log4cplusU.dll
到输出目录 - 在加入一切
./log4cplus-2.0.0/include
额外包括
- 使样品溶液的调试版本(86)。 一切正常。
- 在作出解决方案的构建,我打“跑”,看看是否一切正常。
现在,这是一点是我遇到@Josh在他最初的职位描述完全一样的问题。 现在的实际问题是,我做了log4cplus的发布版本,但在我自己的应用程序的调试版本中使用这个发布版本。
有了这个主意是我做我自己的应用程序的发布版本和一切工作般的魅力!
我把我的全VS2017的解决方案,我的GitHub的回购 ,这样你就可以重现该问题“动手”。 只要改变这个解决方案,以“调试”(86)的配置,看它在运行时产生异常。 将其更改为“释放”(86),看它工作像期待!