当我打电话
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
app、xcom、systemgtk 和 serivce 项目在初始化时加载 log4cplus,systemgtk 和 xcom 在应用程序和服务运行时加载。
我在 app.exe 中初始化了 log4cplus 并想在 systemgtk.dll 中关闭它。
edit3:
好的,这似乎是构建配置问题。我不知道如何解决这个问题。
最佳答案
我发现在“Configuration Properties->General”面板中,如果将“Use of MFC”设置为“Use MFC in a Shared DLL”,错误就会消失;但如果它设置为“在静态库中使用 MFC”,就会出现错误。
关于c++ - log4cplus:在 Logger::shutdown on Windows 上崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41551160/