Когда я называюlog4cplus: авария на Logger :: выключение на Windows,
log4cplus::Logger::shutdown();
он бросает исключение Invalid address specified to RtlFreeHeap(02BF0000, 02B71170)
на deconstructors классов log4cplus в.
Я использую log4cpp 1.2.x (из текущей ветки 1.2.x) и Visual Studio 2010 SP1. Я скомпилировал мое приложение для работы с архитектурой Win32, но он сбой при компиляции для x64. Я создал log4cplus как DLL-файл и добавил файл log4cplus.lib
в качестве дополнительной зависимости от моего приложения, чтобы связать время загрузки. У меня есть другие DLL-файлы, которые динамически загружаются в приложение. Загруженные DLL-файлы, зависящие от времени выполнения, также зависят от log4cplus.
Система регистрации log4cplus инициализирована как можно раньше, чтобы поддерживать ведение журнала на каждом этапе моего приложения (в качестве первого вызова основного метода).
Это проблема с загрузкой DLL-файлов с загрузкой и временем загрузки?
PS: У меня есть некоторые базовые знания о программировании на С ++.
редактировать:
ОС: Windows 8.1 x64
Тип приложения:
- GUI приложение через WinAPI (пользовательских прелоадер, механизм обновления и Логин пользователя)
- родное призвание JVM .dll для создания JavaVM (основное приложение после входа пользователя в систему, написано на Java)
Перед тем, как создать JavaVM, он запускается в исключение после вызова PatternLayout::~PatternLayout()
.
edit2:
Структура моего проектного решения является:
- приложение (исполняемый файл)
- XCOM (DLL библиотека для связи с Java)
- systemgtk (DLL библиотеки для доступ к реестру и графический интерфейс пользователя)
- сервис (исполняемый файл, программа обновления, работает как служба Windows)
- log4cplus
Приложение проекты, XCOM, systemgtk и Serivce нагрузки log4cplus в INIT время, systemgtk и XCOM загружаются во время выполнения внутри приложения и службы.
Я инициализирую log4cplus в app.exe и хочу закрыть его внутри systemgtk.dll.
Edit3:
Хорошо, это, кажется, проблема конфигурации сборки. Я не знаю, как, но я исправил эту проблему.
Несколько вопросов: 1. В какое время вы вызываете 'log4cplus :: Logger :: shutdown();' все еще внутри 'main()'? 2. Какая именно версия log4cplus 1.2.0 это? Это RC или релиз? 3. Что система регистрации log4cplus инициализируется как можно раньше, чтобы поддерживать ведение журнала на каждом этапе моего приложения * означает точно? 4. В какой версии Windows это работает? – wilx
Ну, это выглядит как «[Crash in ~ per \ _thread \ _data · Issue # 155 · log4cplus/log4cplus] (https://github.com/log4cplus/log4cplus/issues/155)», который исправлен, но после 1.2. 0 был выпущен. – wilx
@wilx 1. Я вызываю '' log4cplus :: Logger :: shutdown(); '' внутри цикла GUI WinAPI (и я не уверен, что это тот же поток, возможно, другой поток). Я не написал приложение, я должен расширить его с помощью журнала; 2. Я использую release 1.2.0; 3. Я инициализировал это как первое в основном методе; 4. Windows 8.1 x64 – fireandfuel