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);
}
}