我正在嘗試使用廢棄和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