我有一些准系统代码在我的一台计算机上给出了段错误(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
答案 0 :(得分:0)
更新我的视频驱动程序后问题已解决。