1

log4cplus を SDL と組み合わせて使用​​して、小さなグラフィック アプリケーションを作成しようとしています。
WindowsでminGWとEclipse CDTを使用しています。

私の問題は、ライブラリを使用するたびに SDL ウィンドウが表示されないことです。代わりに、コンソール[New Thread 2624.0x1270]でこれを取得します。それだけです。エラーメッセージなし、コンパイル/リンクの問題なし、何もありません(精度については編集を参照してください)。
ライブラリを使用しない場合、同様のメッセージがコンソールに表示されてから消え、SDL ウィンドウが正しく表示されます。

以下は、この動作の例です。「Logger」で始まる 2 行にコメントを付ければ、問題ありません。そうしないと、SDL ウィンドウが表示されません。

編集:ロギング ライブラリだけを使用して、他のすべてのコードにコメントしようとしましたが、これも何らかの形で失敗します。ロガー コードにブレークポイントを設定できません。eclipse から次のように表示されます。ブレークポイント属性の問題: インストールに失敗し、コードが実行されていないようです。

* Edit2: *私は間違った方向に進んでいました。以下の投稿を参照してください。問題の種類は解決しました。

何か案が?

#include <stdlib.h>
#include <SDL/SDL.h>
#include <SDL/SDL_endian.h> /* Used for the endian-dependent 24 bpp mode */
#include "Screen.h"

#include <log4cplus/logger.h>
#include <iomanip>

using namespace log4cplus;

int main(int argc, char **argv) {

         if ( SDL_Init(SDL_INIT_VIDEO) < 0 ) {
            fprintf(stderr, "Impossible d'initialiser SDL: %s\n", SDL_GetError());
            exit(1);
        }

      SDL_Surface *screen;

         screen = SDL_SetVideoMode(640, 480, 32, SDL_SWSURFACE);
         if ( screen == NULL ) {
             fprintf(stderr, "Impossible de passer en 640x480 en 16 bpp: %s\n", SDL_GetError());
             exit(1);
         }

    Logger root = Logger::getRoot();
    Logger log_1 =  Logger::getInstance(LOG4CPLUS_TEXT("test.log_1"));

         while(true)
         {
             SDL_Event event;
             SDL_WaitEvent(&event);

                        switch (event.type) {
                            case SDL_KEYDOWN:
                                printf("La touche %s a été préssée!\n",
                                       SDL_GetKeyName(event.key.keysym.sym));
                                    //SDL_Quit();
                                break;
                            case SDL_QUIT:
                                exit(0);
                        }

                        Screen::DrawPixel(screen,20,20,200,10,10);
         }
}
4

2 に答える 2

0

問題が見つかりました。プログラムの実行時に gdb が表示したエラー「gdb: unknown target exception 0xc0000135」に気付きませんでした。実際、プログラムはまったく開始されませんでした。

これは、何らかのパスの問題が原因で dll をロードできなかったことを意味します。log4cplusに使用するdllをシステムパスに配置しようとしましたが、Eclipseを開始するなどの他の回避策を試しましたが、役に立ちませんでした。それを機能させるために私が見つけた1つの方法は、単にdllをDebugフォルダーに入れることです。

この gdb エラーの問題はかなり広まっています (google を参照)。これは適切な修正ではありませんが、当面はこれで対処するので、問題は解決したと考えています。

于 2011-02-04T22:32:24.837 に答える
0

私は log4cplus の経験はありませんが、SDL が stdout と stderr の不快な再配線を行うことを認識しておく必要があることは知っています。

Logger のセットアップを SDL_Init 呼び出しの後に移動する必要があると言うつもりでしたが、1 つも持っていないことに気付きました。ディスプレイを設定する前に SDL_Init を呼び出してみてください.

于 2011-02-04T18:49:21.883 に答える