用C语言编写的SDL程序中的分段错误

问题描述 投票:1回答:1

我正在为uni做一个SDL项目,并在windows上的visual studio中制作了一个完全可用的程序,但是当我把程序放在Linux上时(演示所需)我得到了一个分段错误。我想知道我的cmakelist文件是否因为gdb输出错误而主要是sdl库中的东西,但我真的不确定,因为我是cmake的新手。

使用gdb我试图追踪分段错误,但它没有太大的帮助!所有我从Windows版本改变的是我已经制作了一个cmakelists.txt并更改了我在Linux上的SDL头文件中的包含。

GDB输出:

#0  0x00007fffed4f521e in ?? ()
#1  0x00007ffff4f5bac2 in XCloseIM () from /lib64/libX11.so.6
#2  0x00007ffff7b67c44 in X11_VideoQuit () from /lib64/libSDL2-2.0.so.0
#3  0x00007ffff7b37d4e in SDL_VideoQuit_REAL () from /lib64/libSDL2-2.0.so.0
#4  0x00007ffff7aaffc5 in SDL_QuitSubSystem_REAL () from /lib64/libSDL2-2.0.so.0
#5  0x00007ffff7ab00e8 in SDL_Quit_REAL () from /lib64/libSDL2-2.0.so.0
#6  0x000000000040266f in close () at /home/csunix/sc18mk/Documents/Programming Project/SDL/SDL FOR C/main.c:105
#7  0x00007fffed144b13 in _dbus_close () from /lib64/libdbus-1.so.3
#8  0x00007fffed13c2c6 in socket_disconnect () from /lib64/libdbus-1.so.3
#9  0x00007fffed13b0fb in _dbus_transport_disconnect.part.5 () from /lib64/libdbus-1.so.3
#10 0x00007fffed125ee2 in _dbus_connection_close_possibly_shared_and_unlock () from /lib64/libdbus-1.so.3
#11 0x00007ffff7b759d6 in SDL_DBus_Quit () from /lib64/libSDL2-2.0.so.0
#12 0x00007ffff7b37d4e in SDL_VideoQuit_REAL () from /lib64/libSDL2-2.0.so.0
#13 0x00007ffff7aaffc5 in SDL_QuitSubSystem_REAL () from /lib64/libSDL2-2.0.so.0
#14 0x00007ffff7ab00e8 in SDL_Quit_REAL () from /lib64/libSDL2-2.0.so.0
#15 0x000000000040266f in close () at /home/csunix/sc18mk/Documents/Programming Project/SDL/SDL FOR C/main.c:105
#16 0x00007ffff4cefc1b in xcb_disconnect () from /lib64/libxcb.so.1
#17 0x00007fffdcab539d in pa_client_conf_from_x11 () from /usr/lib64/pulseaudio/libpulsecommon-10.0.so
#18 0x00007fffdca76050 in pa_client_conf_load () from /usr/lib64/pulseaudio/libpulsecommon-10.0.so
#19 0x00007fffdccee884 in pa_context_new_with_proplist () from /lib64/libpulse.so.0
#20 0x00007ffff7b5aa2e in ConnectToPulseServer_Internal () from /lib64/libSDL2-2.0.so.0
#21 0x00007ffff7b5b0c9 in PULSEAUDIO_Init () from /lib64/libSDL2-2.0.so.0
#22 0x00007ffff7ab448c in SDL_AudioInit_REAL () from /lib64/libSDL2-2.0.so.0
#23 0x00007ffff7aafcb7 in SDL_InitSubSystem_REAL () from /lib64/libSDL2-2.0.so.0
#24 0x000000000040292f in init () at /home/csunix/sc18mk/Documents/Programming Project/SDL/SDL FOR C/init.c:13
#25 0x0000000000402694 in main (argc=1, args=0x7fffffffdbd8) at /home/csunix/sc18mk/Documents/Programming Project/SDL/SDL FOR C/main.c:111
(gdb) frame 6
#6  0x000000000040266f in close () at /home/csunix/sc18mk/Documents/Programming Project/SDL/SDL FOR C/main.c:105
105     SDL_Quit();
(gdb) frame 15
#15 0x000000000040266f in close () at /home/csunix/sc18mk/Documents/Programming Project/SDL/SDL FOR C/main.c:105
105     SDL_Quit();
(gdb) frame 25
#25 0x0000000000402694 in main (argc=1, args=0x7fffffffdbd8) at /home/csunix/sc18mk/Documents/Programming Project/SDL/SDL FOR C/main.c:111
111     if (init()) {
(gdb) frame 24
#24 0x000000000040292f in init () at /home/csunix/sc18mk/Documents/Programming Project/SDL/SDL FOR C/init.c:13
13      if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO) == -1) {

的CMakeLists.txt:

project(SDL)

#set( CMAKE_BUILD_TYPE Release)
set( CMAKE_BUILD_TYPE Debug)

cmake_minimum_required(VERSION 2.6)
set (CMAKE_C_FLAGS "-std=c99 -lSDL2 -lSDL2_image -lSDL2_ttf -lSDL_mixer -g")

add_executable(kraken main.c init.c kraken.c worldObject.c menu.c leaderboard.c display.c)

set_property(TARGET kraken PROPERTY C_STANDARD 99)
c segmentation-fault sdl
1个回答
1
投票
#14 0x00007ffff7ab00e8 in SDL_Quit_REAL () from /lib64/libSDL2-2.0.so.0
#15 0x000000000040266f in close () at /home/csunix/sc18mk/Documents/Programming Project/SDL/SDL FOR C/main.c:105
#16 0x00007ffff4cefc1b in xcb_disconnect () from /lib64/libxcb.so.1

xcb_disconnect()没有业务称你的close()版本。重命名它,以便它不与POSIX的close()名称冲突或声明它static

© www.soinside.com 2019 - 2024. All rights reserved.