SDL_Init (SDL_INIT_VIDEO) генерирует исключение dbus [3856] о библиотеке dbus - PullRequest
0 голосов
/ 08 октября 2018

Я разработал приложение на C ++, которое, среди прочего, использует SDL2.

Оно компилируется и запускается на Ubuntu 18.04 (64-разрядная машина) и на OSX.

Когда я пытаюсь скомпилировать приложение накомпьютер на чипе под управлением Ubuntu Mate 18.04 на 32-битном компьютере с скомпилированными мной библиотеками возвращает исключение.

Исключение происходит внутри строки SDL_Init( SDL_INIT_VIDEO ), и сообщение выглядит следующим образом:

dbus[3856]: arguments to dbus_message_new_method_call were incorrect, assertion "path != NULL" failed in file ../../../dbus/dbus-message.c ine 1362.
This is normally a bug in some application using D-Bus library.

  D-Bus not built with -rdynamic so unable to print backtrace.
Aborted

Кажется, проблема возникает в Ubuntu, работающем на 32-битной машине.У кого-нибудь была такая же проблема?

Как я могу решить эту проблему?Или кто-нибудь знает, что его генерирует?

ПРИМЕЧАНИЕ 1 Запуск в gdb и использование backtrace в соответствии с рекомендациями:

#0  0xb613d206 in __libc_do_syscall () at ../sysdeps/unix/sysv/linux/arm/libc-do-syscall.S:47
#1  0xb614ab32 in __libc_signal_restore_set (set=0xbeffe3a4) at ../sysdeps/unix/sysv/linux/nptl-signals.h:80
#2  0xb614ab32 in __GI_raise (sig=sig@entry=6) at ../sysdeps/unix/sysv/linux/raise.c:48
#3  0xb614b82e in __GI_abort () at abort.c:79
#4  0xb2adddf0 in _dbus_abort () at /lib/arm-linux-gnueabihf/libdbus-1.so.3
#5  0xb2ad7c5a in _dbus_warn_check_failed () at /lib/arm-linux-gnueabihf/libdbus-1.so.3
#6  0xb2ad8104 in _dbus_warn_return_if_fail () at /lib/arm-linux-gnueabihf/libdbus-1.so.3
#7  0xb2acce80 in dbus_message_new_method_call () at /lib/arm-linux-gnueabihf/libdbus-1.so.3
#8  0xb68acdba in  () at /usr/lib/arm-linux-gnueabihf/libSDL2-2.0.so.0

ПРИМЕЧАНИЕ 2 То же самое происходит, если я устанавливаю SDL из хранилища, а не собираю его.

1 Ответ

0 голосов
/ 15 октября 2018

Я нашел частичное решение, так что любой, кто получит лучшее, будет приветствоваться.

Как предложил @Keltar в комментарии, я отладил его с помощью gdb и backtrace, как уже было сказано в вопросе.Последняя строка backtrace вызвала у меня подозрения:

#8  0xb68acdba in  () at /usr/lib/arm-linux-gnueabihf/libSDL2-2.0.so.0

, что указывало на то, что это не библиотека, созданная мной, а библиотека, установленная с apt.Я проверил все пути в Makefile, и все указывало на мою собственную сборку.Поэтому я проверил файлы динамической библиотеки *.so и обнаружил, что ситуация следующая:

drwxr-xr-x 3 odroid odroid    4096 Oct 15 12:21 cmake
lrwxrwxrwx 1 odroid odroid      17 Oct 15 12:21 libSDL2-2.0d.so -> libSDL2-2.0d.so.0
lrwxrwxrwx 1 odroid odroid      21 Oct 15 12:21 libSDL2-2.0d.so.0 -> libSDL2-2.0d.so.0.8.0
-rw-r--r-- 1 odroid odroid 4317020 Oct 15 12:21 libSDL2-2.0d.so.0.8.0
lrwxrwxrwx 1 odroid odroid      15 Oct 15 12:40 libSDL2-2.0.so -> libSDL2-2.0d.so
-rw-r--r-- 1 odroid odroid 7593354 Oct 15 12:21 libSDL2d.a
-rw-r--r-- 1 odroid odroid    4754 Oct 15 12:19 libSDL2maind.a
lrwxrwxrwx 1 odroid odroid      14 Oct 15 13:38 libSDL2.so -> libSDL2-2.0.so
drwxr-xr-x 2 odroid odroid    4096 Oct 15 12:21 pkgconfig

Обратите внимание, что для файла символьной ссылки libSDL2.so -> libSDL2-2.0.so связанный файл libSDL2-2.0.so не был создан.

Мое решение состояло в том, чтобы перестроить библиотеку в режиме Release вместо Debug, используя cmake -DCMAKE_BUILD_TYPE=Release: таким образом, все файлы библиотеки являются правильными.Другим решением может быть символическая ссылка на файл (ы) вручную, но легко что-то испортить.

Так что, похоже, ошибка в том, как SDL cmake пишет инструкции для типа сборки Debug, потому что в режиме выпускамоя программа запускается.

Если у кого-то есть более подходящее решение или вы найдете ошибку, которую я не смог найти, сообщите мне.

...