c++ - log4cplus:在 Logger::shutdown on Windows 上崩溃

标签 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 应用程序(自定义预加载器、更新机制和用户登录)
  • 原生调用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/

相关文章:

c++ - 如何解决虚拟方法中的实例化问题?

c++ - 清除 std::list 动态对象的最快方法是什么?

c++ - 使用 C++ 获取目录根目录

logging - Kibana 以 JSON 格式记录到 Syslog

c++ - tile_static 动态索引数组;我还应该打扰吗?

c++ - 如何将 argv[] 的内容复制到 c 风格的字符串中?

windows - 是否有可能在 Powershell 中打印裸环境变量?

windows - Adobe Air GUI 问题

visual-studio-2008 - 显示XAML View 时,Visual Studio 2008崩溃。如何获得更多信息?

node.js - 在 Bunyan 日志记录中格式化输出