"Ошибка сегментации: 11" при использовании Derelict и OpenGL
Я пытаюсь запустить это на OSX 10.7:
/**
* simple.d
*/
import std.stdio;
import derelict.sdl.sdl;
import derelict.sdl.macinit.SDLMain;
import derelict.opengl.gl;
pragma(lib, "/usr/local/src/Derelict2/lib/libDerelictUtil.a");
pragma(lib, "/usr/local/src/Derelict2/lib/libDerelictSDL.a");
pragma(lib, "/usr/local/src/Derelict2/lib/libDerelictGL.a");
int main(string[] args) {
// Load Derelict
writeln("Loading SDL...");
DerelictSDL.load();
// Initialise SDL
if( SDL_Init( SDL_INIT_EVERYTHING ) == -1 ) {
throw new Exception("SDL initialization failed");
}
// Enable Double Buffering
SDL_GL_SetAttribute(SDL_GL_DOUBLEBUFFER, 1);
// Set up the screen
SDL_Surface* screen = SDL_SetVideoMode(640, 480, 0, SDL_OPENGL);
if (screen == null) {
throw new Exception("Screen is null");
}
SDL_WM_SetCaption("Simple", "Simple");
// Print OpenGL and GLSL version
writeln("Version Info");
writeln("OpenGL:t", glGetString(GL_VERSION));
writeln("GLSL:t", glGetString(GL_SHADING_LANGUAGE_VERSION));
// Execute frame update
SDL_GL_SwapBuffers();
// Quit SDL; SDL_Quit() takes care of freeing the screen surface
writeln("Quitting SDL...");
SDL_Quit();
writeln("Bye!");
return 0;
}
Он прекрасно компилируется, но когда я пытаюсь запустить его, я получаю:
$ ./simple
Loading SDL...
Version Info
Segmentation fault: 11
Вот вывод потока:
Thread 0:: Dispatch queue: com.apple.main-thread
0 libsystem_kernel.dylib 0x00007fff8376282a __kill + 10
1 libsystem_c.dylib 0x00007fff8e965cfa _sigtramp + 26
2 ??? 000000000000000000 0 + 0
3 simple 0x000000010d299db9 D2rt6dmain24mainUiPPaZi7runMainMFZv + 29
4 simple 0x000000010d29976e D2rt6dmain24mainUiPPaZi7tryExecMFMDFZvZv + 38
5 simple 0x000000010d299e06 D2rt6dmain24mainUiPPaZi6runAllMFZv + 58
6 simple 0x000000010d29976e D2rt6dmain24mainUiPPaZi7tryExecMFMDFZvZv + 38
7 simple 0x000000010d2996f9 main + 237
8 simple 0x000000010d24a554 start + 52
Thread 1 Crashed:: Dispatch queue: com.apple.libdispatch-manager
0 libsystem_kernel.dylib 0x00007fff837637e6 kevent + 10
1 libdispatch.dylib 0x00007fff896b378a _dispatch_mgr_invoke + 923
2 libdispatch.dylib 0x00007fff896b231a _dispatch_mgr_thread + 54
Теперь, если я попытаюсь скомпилировать как Derelict, так и simple.d
в 32-битном режиме (-m32
), я получу вместо этого такой вывод:
$ ./simple
Loading SDL...
Version Info
Bus error: 10
Вывод потока:
Thread 0:: Dispatch queue: com.apple.main-thread
0 libsystem_kernel.dylib 0x93107332 __kill + 10
1 libsystem_kernel.dylib 0x93106932 kill$UNIX2003 + 32
2 libsystem_c.dylib 0x943f175e raise + 26
3 libsystem_c.dylib 0x9447d59b _sigtramp + 43
4 ??? 0xffffffff 0 + 4294967295
5 SDL 0x01bb7108 SDL_Error + 275
6 simple 0x000760ab D2rt6dmain24mainUiPPaZi7runMainMFZv + 23
7 simple 0x00075a6c D2rt6dmain24mainUiPPaZi7tryExecMFMDFZvZv + 24
8 simple 0x000760f3 D2rt6dmain24mainUiPPaZi6runAllMFZv + 59
9 simple 0x00075a6c D2rt6dmain24mainUiPPaZi7tryExecMFMDFZvZv + 24
10 simple 0x00075a0c main + 184
11 simple 0x00035bb5 start + 53
Thread 1 Crashed:: Dispatch queue: com.apple.libdispatch-manager
0 libsystem_kernel.dylib 0x9310890a kevent + 10
1 libdispatch.dylib 0x96a74e10 _dispatch_mgr_invoke + 969
2 libdispatch.dylib 0x96a7385f _dispatch_mgr_thread + 53
Я пробовал другие функции gl...
, такие как glClearColor()
, и они дают те же результаты.