仅显示 window 后 SDL_quit() 出现段错误 0x8B

segfault 0x8B at SDL_quit() after only making display window

我有一些准系统代码在我的一台计算机上出现段错误 (0x8B),但在另一台计算机上没有。 运行 Ubuntu 在两者上(14.04.3 在有问题的 PC 上,14.04.2 在我没有问题的笔记本电脑上),都在代码块中开发。

#ifdef __cplusplus
#include    <cstdlib>
#else
#include    <stdlib.h>
#endif


#include    <SDL2/SDL.h>
#include    <SDL2/SDL2_gfxPrimitives.h>

int main ( int argc, char** argv )
    {
    // initialize SDL video
    if ( SDL_Init( SDL_INIT_VIDEO ) < 0 )
    {
        return 1;
    }

    SDL_Window *screen = SDL_CreateWindow("My Game Window",
        0,
        0,
        640, 480,
        SDL_WINDOW_OPENGL | SDL_WINDOW_INPUT_GRABBED);

SDL_Quit();
return 0;
}

代码在我的 PC 上 SDL_Quit(); 处抛出分段错误,但我的笔记本电脑上没有。我相信这与编译过程有关,因为如果我在我的笔记本电脑上编译并在我的 PC 上编译 运行,PC 不会抛出任何错误。如果我在我的 PC 上编译,我的 PC 和笔记本电脑都会出现段错误。我已经检查过我确实在两台机器上使用相同的选项进行编译,但问题仍然存在。

不确定从这里去哪里?想法?

编辑: 尽管 JPD 在评论中提出了建议,但问题仍然存在。但是,问题肯定与屏幕有关,因为删除对 SDL_CreateWindow() 的调用可以防止 SDL_Quit()

处的段错误

编辑2: 仍在学习调试,段错误对我来说是新的,刚刚 运行 从命令行通过 gdb 的程序现在有一些新信息,仍然不确定如何处理它

Program received signal SIGSEGV, Segmentation fault.
__GI___pthread_mutex_lock (mutex=0x606b00) at ../nptl/pthread_mutex_lock.c:66
66  ../nptl/pthread_mutex_lock.c: No such file or directory.

我在我的 PC 设置中找不到这个文件,而且我的笔记本电脑上也没有这个文件。所以不确定为什么一台计算机在抱怨而另一台计算机却没有。想法?

编辑3: 找到了这个 https://forums.libsdl.org/viewtopic.php?t=8735&sid=fd6401057fbfe9cfdd04a5445a3dbbab 但还不了解解决方法的实现,如果这也与我的问题相关。

编辑4: 根据EDIT3中的link,我尝试在编译和linking命令中添加-pthread,但仍然没有解决方案。我在对 SDL2 库的引用之前和之后都尝试了这些标志。

编辑5: 静态 linking 到 SDL2 和 SDL2_gfx 库修复了问题,但不确定为什么动态 linking 失败。回溯如下:

#0  __GI___pthread_mutex_lock (mutex=0x606b00) at ../nptl/pthread_mutex_lock.c:66
#1  0x00007ffff600c2c7 in XrmDestroyDatabase () from /usr/lib/x86_64-linux-gnu/libX11.so.6
#2  0x00007ffff5ff47b3 in _XFreeDisplayStructure () from /usr/lib/x86_64-linux-gnu/libX11.so.6
#3  0x00007ffff5fe24ef in XCloseDisplay () from /usr/lib/x86_64-linux-gnu/libX11.so.6
#4  0x00007ffff7b81360 in ?? () from /usr/lib/x86_64-linux-gnu/libSDL-1.2.so.0
#5  0x00007ffff7b7395e in SDL_VideoQuit () from /usr/lib/x86_64-linux-gnu/libSDL-1.2.so.0
#6  0x00007ffff7b4df75 in SDL_QuitSubSystem () from /usr/lib/x86_64-linux-gnu/libSDL-1.2.so.0
#7  0x00007ffff7b4e01e in SDL_Quit () from /usr/lib/x86_64-linux-gnu/libSDL-1.2.so.0
#8  0x00000000004019f3 in main (argc=1, argv=0x7fffffffdee8) at main.cpp:371

更新我的视频驱动程序后问题已解决。