log4cplus:Windows

时间:2017-01-09 15:18:53

标签: c++ windows logging dll log4cplus

当我打电话

log4cplus::Logger::shutdown();

它会在log4cplus的类的解构器上抛出异常Invalid address specified to RtlFreeHeap( 02BF0000, 02B71170 )

我使用的是log4cpp 1.2.x(来自当前的1.2.x分支)和Visual Studio 2010 SP1。我编译我的应用程序以在Win32架构上工作,但是在为x64编译时它也会崩溃。我创建了log4cplus作为DLL文件,并将log4cplus.lib文件作为附加依赖项添加到我的应用程序以链接它加载时间。我有一些其他DLL文件,它们是运行时动态加载到应用程序中的。运行时加载的DLL也依赖于log4cplus。

log4cplus的日志系统尽早初始化,以支持我的应用程序的每个阶段的日志记录(作为main方法中的第一次调用)。

混合加载时和加载运行时的DLL文件是一个问题吗?

PS:我对C ++编程有一些基础知识。

编辑

操作系统:Windows 8.1 x64

申请类型:

  • WinAPI上的GUI应用程序(自定义预加载器,更新机制和用户登录)
  • native调用jvm.dll来创建JavaVM(用户登录后的主应用程序,用Java编写)

在创建JavaVM之前调用PatternLayout::~PatternLayout()后会遇到异常。

EDIT2:

我的项目解决方案的结构是:

  • app(可执行文件)
  • xcom(用于与Java通信的DLL库)
  • systemgtk(用于注册表访问和GUI的dll库)
  • 服务(可执行文件,后台更新程序,作为Windows服务运行)
  • log4cplus

项目app,xcom,systemgtk和serivce在初始时加载log4cplus,systemgtk和xcom在应用程序和服务内部运行时加载。

我在app.exe中初始化log4cplus并希望在systemgtk.dll中关闭它。

edit3:

好的,它似乎是一个构建配置问题。我不知道怎么做,但我解决了这个问题。

1 个答案:

答案 0 :(得分:0)

我发现在"配置属性 - >一般"小组如果"使用MFC"设置为"在共享DLL中使用MFC",错误将消失;但如果它设置为"在静态库中使用MFC",则会显示错误。