4

当我使用 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();
}
4

2 回答 2

2

你做错了。如果window == NULL,您应该调用 checkSDLError() 。

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

返回创建的窗口或失败时返回 NULL;调用 SDL_GetError() 获取更多信息。

于 2013-04-19T20:46:10.603 回答
1

在与列表 (SDL http://lists.libsdl.org/listinfo.cgi/sdl-libsdl.org ) 的对话中,我以与 phpBoing 报告的方式相同的方式获知。最近怎么有几个关于这个问题的报告,为了不再出现这个问题而进行了调整( http://hg.libsdl.org/SDL/rev/f8e3dcfed59 )。

谢谢大家。

于 2013-04-20T00:21:47.243 回答