Ошибка сегментации в программе SDL, написанной на C - PullRequest
1 голос
/ 27 апреля 2019

Я делаю проект SDL для Uni и сделал полностью рабочую программу в Visual Studio для Windows, однако, когда я ставлю программу на Linux (требуется для демонстрации), я получаю ошибку сегментации.Мне интересно, является ли мой файл cmakelist неправильным из-за того, что вывод gdb в основном связан с библиотеками sdl, но я действительно не уверен, поскольку я новичок в cmake.

Используя gdb, я попытался отследить сегментациюошибка, но это не сильно помогло!Все, что я изменил по сравнению с версией для Windows, - это то, что я создал файл cmakelists.txt и изменил включения в мои заголовочные файлы для SDL на Linux.

Вывод 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)

1 Ответ

1 голос
/ 28 апреля 2019
#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(). Переименуйте его, чтобы он не конфликтовал с close() именем POSIX, или объявите его static.

...