仅在显示窗口

时间:2015-08-17 17:17:07

标签: segmentation-fault sdl-2

我有一些准系统代码在我的一台计算机上给出了段错误(0x8B),但没有另一台。在两者上运行Ubuntu(在有问题的PC上为14.04.3,在我的无问题笔记本电脑上为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和笔记本电脑都会出现段错误。我已经检查过我确实在两台机器上编译了相同的选项,问题仍然存在。

不确定从哪里开始?想法?

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

的段错误

EDIT2: 还在学习调试,段错误对我来说是新的,刚刚从命令行通过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.

我无法在我的电脑设置中找到此文件,但我也没有在笔记本电脑上找到此文件。所以不确定为什么一台电脑抱怨而另一台电脑不抱怨。想法?

EDIT3: 发现这个https://forums.libsdl.org/viewtopic.php?t=8735&sid=fd6401057fbfe9cfdd04a5445a3dbbab但是不了解变通方法的实施,如果这也与我的问题相关。

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

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

#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

1 个答案:

答案 0 :(得分:0)

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