2012-08-15 50 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