2012-08-15 127 views
1

当运行以下d代码我得到一个奇怪的SDL错误:SDL2初始化SDL_INIT_VIDEO未知错误

import std.string; 
import derelict.sdl2.sdl; 

pragma(lib, "DerelictUtil"); 
pragma(lib, "DerelictSDL2"); 

int main(){ 
     DerelictSDL2.load(); 
     if(SDL_Init(SDL_INIT_VIDEO) < 0){ 
     throw new Exception(format("Error initalizing SDL: %s", SDL_GetError())); 
     } 
     return 0; 
} 

它返回从SDL_GetError()以下

[email protected](12): Error initalizing SDL: 7F2802391940 
---------------- 
./min(extern (C) int rt.dmain2.main(int, char**).void runMain()+0x1c) [0x434284] 
./min(extern (C) int rt.dmain2.main(int, char**).void tryExec(scope void delegate())+0x2a) [0x433bfe] 
./min(extern (C) int rt.dmain2.main(int, char**).void runAll()+0x3b) [0x4342cb] 
./min(extern (C) int rt.dmain2.main(int, char**).void tryExec(scope void delegate())+0x2a) [0x433bfe] 
./min(main+0xd1) [0x433b89] 
/lib/x86_64-linux-gnu/libc.so.6(__libc_start_main+0xed) [0x7f28023b776d] 
---------------- 

我对最新运行此从mercurial构建的SDL2版本。 d代码使用dmd v2.060进行编译。它看起来像数字7F2802391940是垃圾,但事先调用SDL_ClearError仍然会产生类似的十六进制错误消息。

回答

2

7F2802391940可能是错误消息的地址(存储为以空字符结尾的字符串)。 D的format函数不理解这些(或者更确切地说,将它们视为任何其他指针),因此将其转换为明确使用text(SDL_GetError())的D字符串(请勿忘记导入std.conv)。

+0

谢谢。问题原来是“没有可用的视频设备”,将单独追求这个新问题。 – cmh 2012-08-15 20:11:13