SDL не показывает свое окно, если я использую библиотеку журналов - PullRequest
1 голос
/ 04 февраля 2011

Я пытаюсь использовать log4cplus в сочетании с SDL для создания небольшого графического приложения.
Я использую minGW и Eclipse CDT для Windows.

Моя проблема в том, что всякий раз, когда я использую библиотеку, мое окно SDL не отображается.Вместо этого я получаю это на консоли [New Thread 2624.0x1270] и все.Нет сообщений об ошибках, нет проблем компиляции / компоновки, ничего (см. Точность в редактировании).
Если я не использую библиотеку, аналогичное сообщение появляется на консоли, а затем исчезает, и мое окно SDL отображается правильно.

Ниже приведен пример такого поведения.Если я прокомментирую две строки, начинающиеся с «Logger», то все в порядке.Если нет, окно SDL не отображается.

Редактировать: Я пытался использовать только библиотеку журналов и комментировать весь другой код, но это как-то не получается.Я не могу поставить точку останова в коде регистратора, затмение говорит мне: Проблема с атрибутом точки останова: установка не удалась , и код, похоже, не выполняется.

* 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 голосов
/ 05 февраля 2011

Я нашел проблему. Я не заметил ошибку, выданную мне gdb при запуске программы: " gdb: неизвестное целевое исключение 0xc0000135 ". Фактически программа вообще не запускалась.

Это означает, что он не мог загрузить DLL из-за проблем с путями. Я попытался поместить dll, который я использую для log4cplus в системный путь, пробовал другие обходные пути, такие как запуск eclipse, но безрезультатно. Один способ, который я нашел, чтобы заставить это работать, состоит в том, чтобы просто поместить dll в папку Debug.

Проблема с этой ошибкой GDB довольно распространена (см. Google). Это не правильное решение, но я буду жить с этим в настоящее время, поэтому я считаю, что проблема решена.

0 голосов
/ 04 февраля 2011

У меня нет опыта работы с log4cplus, но я знаю, что вы должны знать, что SDL выполняет некоторые неприятные изменения в stdout и stderr.

Я собирался сказать, что вам следует перенести настройку Logger после вызова SDL_Init, но я просто заметил, что у вас его даже нет. Попробуйте вызвать SDL_Init перед настройкой дисплея.

...