仅显示 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
更新我的视频驱动程序后问题已解决。
我有一些准系统代码在我的一台计算机上出现段错误 (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
更新我的视频驱动程序后问题已解决。