2017-01-09 4 views
1

で、私はそれがlog4cplusのクラスのdeconstructorsに例外をスローInvalid address specified to RtlFreeHeap(02BF0000, 02B71170)log4cplus:クラッシュロガーの::シャットダウンのWindows

log4cplus::Logger::shutdown(); 

を呼び出します。

私は(現在の1.2.xのブランチから)log4cpp 1.2.xのとVisual Studio 2010 SP1を使用しています。 Win32アーキテクチャで動作するようにアプリケーションをコンパイルしましたが、x64用にコンパイルするとクラッシュします。私はDLLファイルとしてlog4cplusを作成し、負荷時間をリンクするためにアプリケーションに追加の依存関係としてlog4cplus.libファイルを追加しました。私は実行時にアプリケーションに動的にロードされるいくつかの他のDLLファイルを持っています。実行時にロードされるDLLは、log4cplusにも依存します。

log4cplusのロギングシステムは、(mainメソッドの最初の呼び出しのように)自分のアプリケーションのすべての段階でのロギングをサポートするために、可能な限り早期に初期化されます。

ロード時と実行時に読み込まれたDLLファイルを混在させると問題がありますか?

PS:C++プログラミングに関するいくつかの基本的な知識があります。

編集:

OS:Windowsの8.1 x64の

アプリケーションの種類:WinAPIのオーバー

  • GUIアプリケーション(カスタムプリローダー、更新メカニズムおよびユーザー・ログイン)
  • ネイティブ呼び出しJVM .dll JavaVMを作成する(ログイン後のメインアプリケーションはJavaで書かれている)

JavaVMを作成する前に、PatternLayout::~PatternLayout()を呼び出した後で例外が発生します。

EDIT2:

私のプロジェクトソリューションの構造は次のとおりです。

  • アプリ(実行ファイル)
  • XCOM
  • systemgtk(用のDLLライブラリ(Javaのとの通信のためのDLLライブラリ)レジストリアクセスおよびGUI)
  • サービス(実行可能、バックグラウンドアップデータ、Windowsサービスとして実行)
  • log4cplus

プロジェクトアプリ、XCOM、systemgtkとserivce負荷log4cplus初期化時に、systemgtkとXCOMは、アプリやサービス内の実行時にロードされます。

私はapp.exeの中log4cplusを初期化し、systemgtk.dll内でそれを閉じたいです。

EDIT3:

さて、ビルド構成の問題のようです。方法はわかりませんが、私はこの問題を修正しました。

+1

少し質問: 1.いつ 'log4cplus :: Logger :: shutdown();を呼び出すのですか?' main() 'の中にいますか? 2. log4cplus 1.2.0の正確なバージョンはこれですか?それはRCかリリース自体ですか? 3. * log4cplusのロギングシステムは、アプリケーションのすべての段階でロギングをサポートするためにできるだけ早期に初期化されます*とはどういう意味ですか? 4.これは実行されているWindowsのバージョンは何ですか? – wilx

+0

これは、「[クラッシュ〜〜_ _thread \ _data・Issue#155・log4cplus/log4cplus](https://github.com/log4cplus/log4cplus/issues/155)」のように見えますが、1.2以降は修正されています。 0がリリースされました。 – wilx

+0

@wilx 1. WinAPIのGUIループの中で '' log4cplus :: Logger :: shutdown(); ''を呼びます(それは同じスレッド、おそらく別のスレッドであるかどうかはわかりません)。私はアプリケーションを書いていない、私はロギングでそれを拡張する必要があります。 2.私はリリース1.2.0を使用しています。私はメインメソッドの最初のものとしてそれを初期化しました。 4. Windows 8.1 x64 – fireandfuel

答えて

0

"Use MFC"が "Use MFC in a Shared DLL"に設定されている場合、 "Configuration Properties-> General"パネルでエラーがなくなります。 「静的ライブラリでMFCを使用する」に設定されている場合は、エラーが表示されます。

関連する問題