2017-01-09 3 views
1

Wenn ichlog4cplus: Absturz auf Logger :: Shutdown auf Windows

log4cplus::Logger::shutdown(); 

es eine Ausnahme Invalid address specified to RtlFreeHeap(02BF0000, 02B71170) Klassen der auf deconstructors von log4cplus wirft nennen.

Ich verwende log4cpp 1.2.x (aus dem aktuellen 1.2.x-Zweig) und Visual Studio 2010 SP1. Ich kompilierte meine Anwendung, um mit der Win32-Architektur zu arbeiten, aber sie stürzt ab, wenn sie auch für x64 kompiliert wird. Ich erstellte log4cplus als DLL-Datei und fügte die Datei log4cplus.lib als zusätzliche Abhängigkeit zu meiner Anwendung hinzu, um die Ladezeit zu verknüpfen. Ich habe einige andere DLL-Dateien, die Laufzeit dynamisch in die Anwendung geladen werden. Die Runtime-geladenen DLLs hängen auch von log4cplus ab.

Das Protokollierungssystem von log4cplus wird so früh wie möglich initialisiert, um die Protokollierung in jeder Phase meiner Anwendung zu unterstützen (als erster Aufruf in der Hauptmethode).

Ist es ein Problem mit dem Mischen von Ladezeit und Laufzeit geladen DLL-Dateien?

PS: Ich habe Grundkenntnisse in C++ Programmierung.

edit:

OS: Windows 8.1 x64

Anwendungstyp:

  • GUI-Anwendung über WinAPI (custom preloader, Update-Mechanismus und Benutzer-Login)
  • nativer Berufung Jvm .dll zum Erstellen einer JavaVM (Hauptanwendung, nachdem der Benutzer angemeldet ist, ist in Java geschrieben)

Beim Aufruf von PatternLayout::~PatternLayout() tritt vor dem Erstellen einer JavaVM eine Ausnahme auf.

edit2:

Die Struktur meiner Projektlösung ist:

  • app (ausführbare Datei)
  • xcom (DLL-Bibliothek für die Kommunikation mit Java)
  • systemgtk (DLL-Bibliothek für Registry-Zugriff und GUI)
  • Service (ausführbare Datei, Hintergrund-Updater, läuft als Windows-Dienst)
  • log4cplus

Die Projekte App, xcom, systemgtk und serivce Lasten log4cplus bei init Zeit, systemgtk und xcom zur Laufzeit in der App und Service geladen werden.

Ich initialisiere log4cplus in der app.exe und möchte es in der systemgtk.dll schließen.

EDIT3:

Okay, so scheint es, ein Build-Konfigurationsproblem zu sein. Ich weiß nicht wie, aber ich habe dieses Problem behoben.

+1

Wenige Fragen: 1. Um welche Zeit rufen Sie 'log4cplus :: Logger :: shutdown();' Ist es immer noch 'main()'? 2. Welche genaue Version von log4cplus 1.2.0 ist das? Ist es ein RC oder das Release selbst? 3. Was bedeutet * Log4cplus Logging-System wird so früh wie möglich initialisiert, um die Protokollierung in jeder Phase meiner Anwendung zu unterstützen * bedeuten genau? 4. In welcher Windows-Version läuft dies? – wilx

+0

Nun, das sieht aus wie "[Absturz in \ pro Thread \ _data · Ausgabe # 155 · log4cplus/log4cplus] (https://github.com/log4cplus/log4cplus/issues/155)", die aber nach 1.2 behoben ist. 0 wurde veröffentlicht. – wilx

+0

@wilx 1. Ich rufe '' log4cplus :: Logger :: shutdown(); '' in einer WinAPI-GUI-Schleife auf (und ich bin mir nicht sicher, ob es der gleiche Thread ist, wahrscheinlich ein anderer Thread). Ich habe die Anwendung nicht geschrieben, ich muss sie mit Protokollierung erweitern; 2. Ich benutze Release 1.2.0; 3. Ich habe es als erstes in der Hauptmethode richtig initialisiert; 4. Windows 8.1 x64 – fireandfuel

Antwort

0

Ich fand, dass in der "Configuration Properties -> General" Panel, wenn "Verwendung von MFC" auf "MFC in einer gemeinsamen DLL verwenden" festgelegt ist, der Fehler wird weg sein; Wenn es jedoch auf "MFC in einer statischen Bibliothek verwenden" eingestellt ist, wird der Fehler angezeigt.