我正在尝试使用废弃和D编写简单的图形测试程序。使用废弃SDL时的分段错误
当我尝试使用SDL执行几乎任何操作时,它都会发生seg-fault。这是有问题的代码:
import std.stdio;
import derelict.opengl3.gl3;
import derelict.sdl2.sdl;
import derelict.sdl2.image;
import derelict.sdl2.mixer;
import derelict.sdl2.ttf;
import derelict.sdl2.net;
void main()
{
SDL_Window* mainWindow;
SDL_GLContext mainGLContext;
try
{
DerelictGL3.load();
// Load the SDL 2 library.
DerelictSDL2.load();
.
DerelictSDL2Image.load();
DerelictSDL2Mixer.load();
DerelictSDL2ttf.load();
DerelictSDL2Net.load();
}
catch(Exception e){}
finally{}
// Initialise SDL
if(SDL_Init(SDL_INIT_EVERYTHING) == -1) {
throw new Exception("SDL initialization failed");
}
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION,3);
SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION,3);
Uint32 flags = SDL_WINDOW_SHOWN|SDL_WINDOW_OPENGL;
int width = 1024;
int height = 768;
mainWindow = SDL_CreateWindow("SDL2 OpenGL Example", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, width, height, flags);
mainGLContext = SDL_GL_CreateContext(mainWindow);
DerelictGL3.reload();
SDL_DestroyWindow(mainWindow);
SDL_Quit();
}
即使一切都低于SDL_GL_SetAttribute()
被注释掉仍然会出现此问题。
此外,试图加载SDL遗弃时抛出一个异常,但我认为这是相当普遍的。
derelict.util.exception.SymbolLoadException @ ../.. /配音/包/ derelict- UTIL-2.0.4 /源/废弃/ UTIL/exception.d(35):无法从共享库中加载符号SDL_QueueAudio libSDL2.so
我运行的基本操作系统,并使用apt-get的保证SDL是最新的。
非常感谢您的帮助。
诶,我不使用玩忽职守,不知道它是如何工作在这里,但我怀疑的负载例外是东西,你可以忽略。如果无法加载该符号,它可能无法完成加载其他符号 - 包括像SDL_init函数那样需要的符号。 –
@ AdamD.Ruppe谢谢。我误解了这个关于废弃装载机异常的说法。 (https://derelictorg.github.io/using/fail.html)。当我添加回调时,它可以正常工作。但是,有很多东西无法加载,所以我可能安装了错误的SDL。 –
错误的最可能原因是您使用的SDL版本太旧。如果您使用的是Derelict-SDL2 2.0.4,则您还必须使用SDL 2.0.4 – Cubic