SDL 2.0 -> Передал NULL мьютекс

Когда я компилирую простой пример с SDL 2.0, после команды SDL_CreateWindow возникает следующая ошибка: «Перешел NULL мьютекс».

Я использую проект статической библиотеки. Также я тестирую OSX 10.8.3.

Это сообщает, что чего-то не хватает при компиляции командной строки?

Ниже приведена командная строка для генерации программы и пример кода.

Компилятор:

clang++ -I "TestSDL/sdl/include" -Wall -c -x c++ -arch x86_64 -std=c++11 -stdlib=libc++ -MMD -MP -MF"src/main.d" -MT"src/main.d" -o "src/main.o" "../src/main.cpp"

Линкер:

clang++ -L "TestSDL/sdl/lib" -arch x86_64 -stdlib=libc++ -Bstatic -framework GLUT -framework ForceFeedBack -framework IOKit -framework CoreAudio -framework CoreFoundation -framework Carbon -framework AudioUnit -framework AudioToolbox -framework OpenGL -framework Cocoa -o "TestSDL" ./src/main.o -lSDL2

Код:

#include "SDL.h"
#include <iostream>

using namespace std;

void checkSDLError(int line = -1)
{
    const char *error = SDL_GetError();

    if (*error != '\0') {
        cout << "SDL Error: " << error << " line: " << line << endl;
        SDL_ClearError();
    }
}

int main(int argc, char **argv)
{
    if (SDL_Init(SDL_INIT_EVERYTHING) < 0) {
        return false;
    }

    SDL_Window * window = SDL_CreateWindow("Test SDL", SDL_WINDOWPOS_CENTERED,
            SDL_WINDOWPOS_CENTERED, 512, 512,
            SDL_WINDOW_SHOWN);
    checkSDLError(__LINE__);

    if (!window) {
        cout << "Unable to create window" << endl;
        return 1;
    }

    SDL_Event event;
    while (true) {
        while (SDL_PollEvent(&event)) {
            switch (event.type) {
                case SDL_QUIT:
                    return 1;

                default:
                    break;
            }
        }
    }

    SDL_DestroyWindow(window);
    SDL_Quit();
}

person SilvioFragnani    schedule 15.04.2013    source источник
comment
Когда это произошло, что вы изменили?   -  person    schedule 15.04.2013
comment
Как известно, происходит после команды SDL_CreateWindow и проверяется функцией checkSDLError . И я хотел бы исправить эту проблему, однако я не нашел информации об этом. Или если это действительно проблема.   -  person SilvioFragnani    schedule 15.04.2013


Ответы (2)


Ты делаешь это неправильно. Вы должны только вызывать checkSDLError() если window == NULL.

http://wiki.libsdl.org/moin.fcg/SDL_CreateWindow

Возвращает окно, которое было создано, или NULL в случае ошибки; вызовите SDL_GetError() для получения дополнительной информации.

person phpBoing    schedule 19.04.2013
comment
хорошо, однако, когда можно проверить ошибки в любое время, в этом случае я закончил без проверки, однако я вернул ошибку. - person SilvioFragnani; 20.04.2013

В диалоге со списком (SDL http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org), я был проинформирован так же, как и phpBoing. Как недавно было получено несколько сообщений об этой проблеме, была внесена корректировка (http://hg.libsdl.org/SDL/rev/f8e3dcefed59), чтобы эта проблема больше не возникала.

Спасибо всем.

person SilvioFragnani    schedule 20.04.2013