sdl - 使用 Derelict SDL 时出现段错误

标签 sdl d derelict3

我正在尝试使用 Derelict 和 D 编写一个简单的图形测试程序。

当我尝试用 SDL 做几乎任何事情时,它都会出现段错误。这是有问题的代码:

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() 下的所有内容都被注释掉,问题仍然会发生。

此外,derelict 在尝试加载 SDL 时会抛出异常,但我认为这很常见:

derelict.util.exception.SymbolLoadException@../../.dub/packages/derelict-util-2.0.4/source/derelict/util/exception.d(35): Failed to load symbol SDL_QueueAudio from shared library libSDL2.so

我正在运行 Elementary OS 并使用 apt-get 来确保 SDL 是最新的。

非常感谢您的帮助。

最佳答案

这几乎可以肯定是由于 SDL 版本问题。

我的建议是从源代码构建整个东西。 无论如何都不难。

您可以在此处获取 SDL2 源代码:

https://www.libsdl.org/download-2.0.php

确保您也获得了额外的项目,即 sdl2 图像、网络、混合器和 ttf。 这些链接位于:

https://www.libsdl.org/projects/

安装它们,你通常的

./configure
make
sudo make install

会成功的。先做 SDL2,然后按你喜欢的顺序做其余的。

关于sdl - 使用 Derelict SDL 时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35778861/

相关文章:

c++ - 当包含 SDL 时,简单的 tcp echo 程序不工作?

c - 获取SDL 2应用程序的窗口句柄

OS X 上的 Derelict3 D 绑定(bind)

d - 从数组中定义的文件名导入内容

c - 调用更改结构体值的函数时出现问题

c++ - 通过采用 void * 的 C 接口(interface)传递 shared_ptr

iphone - D 编程和 iPhone

dmd 和 gdc 编译代码不同?

linux - SDL 窗口似乎被操作系统错误地标记为 'unresponsive'