当我打电话
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应用程序(自定义预加载器,更新机制和用户登录)
本机调用jvm.dll创建JavaVM(用户登录后的主应用程序,用Java编写)
在创建JavaVM之前,在调用
PatternLayout::~PatternLayout()
之后,它将遇到异常。编辑2:
我的项目解决方案的结构是:
应用(可执行)
xcom(用于与Java通信的dll库)
systemgtk(用于注册表访问和GUI的dll库)
服务(可执行的后台更新程序,作为Windows服务运行)
log4cplus
项目应用程序xcom,systemgtk和serivce在初始化时加载log4cplus,systemgtk和xcom在运行时在应用程序和服务中加载。
我在app.exe中初始化log4cplus,并希望在systemgtk.dll中将其关闭。
编辑3:
好的,这似乎是构建配置问题。我不知道如何,但是我解决了这个问题。
最佳答案
我发现在“配置属性->常规”面板中,如果将“使用MFC”设置为“在共享DLL中使用MFC”,该错误将消失。但是如果将其设置为“在静态库中使用MFC”,则会显示错误。
关于c++ - log4cplus:Windows上Logger::shutdown崩溃,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/41551160/