如果我使用日志库,SDL不会显示其窗口

时间:2011-02-04 18:35:32

标签: c++ mingw sdl eclipse-cdt log4cplus

我正在尝试将log4cplus与SDL结合使用来制作一个小图形应用程序 我在Windows上使用minGW和Eclipse CDT。

我的问题是每当我使用该库时,我的SDL窗口都不会显示。 相反,我在控制台[New Thread 2624.0x1270]上得到了这个,就是这样。没有错误信息,没有编译/链接问题,没有(请参阅编辑精度) 如果我不使用该库,控制台上会出现类似的消息,然后消失,我的SDL窗口显示正确。

以下是此行为的示例。如果我评论以“Logger”开头的两行,那么一切都很好。如果不这样做,则不显示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);
         }
}

2 个答案:

答案 0 :(得分:0)

我没有log4cplus的经验,但我知道你应该知道SDL会对stdout和stderr进行一些令人讨厌的重新布线。

我打算说你应该在你的SDL_Init电话之后移动你的Logger设置,但我只是注意到你甚至没有。在设置显示器之前尝试调用SDL_Init。

答案 1 :(得分:0)

我发现了问题。我没有注意到gdb在运行程序时给出的错误:“ gdb:未知目标异常0xc0000135“。实际上程序根本没有启动。

这意味着由于某些路径问题,它无法加载dll。我尝试将我用于log4cplus的dll放在系统路径中,尝试了其他的解决方法,比如启动eclipse但无济于事。我发现使其工作的一种方法是将dll放在Debug文件夹中。

此gdb错误的问题相当普遍(请参阅google)。这不是一个正确的解决方案,但我会暂时忍受它,所以我认为问题已经解决了。