SDL_Init(SDL_INIT_VIDEO) 生成关于 dbus 库的异常 dbus[3856]

SDL_Init(SDL_INIT_VIDEO) generating excpetion dbus[3856] about dbus library

我开发了一个使用 SDL2 的 C++ 应用程序。

它在 Ubuntu 18.04(64 位机器)和 OSX.

上编译和 运行

当我尝试在片上计算机 运行ning Ubuntu Mate 18.04 上使用我编译的库编译应用程序时,它 returns 一个异常.

异常发生在 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

在 32 位机器上 Ubuntu 运行ning 似乎发生了问题。有人遇到过同样的问题吗?

我该如何解决这个问题?或者有人知道它是什么产生的吗?

注 1 运行 in 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 而不是构建它,也会发生同样的情况。

我找到了一个部分解决方案,欢迎任何有更好解决方案的人。

正如@Keltar 在评论中建议的那样,我使用 gdb 和回溯对其进行了调试,正如问题中已经说过的那样。回溯的最后一行让我怀疑:

#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

请注意,对于符号 link 文件 libSDL2.so -> libSDL2-2.0.so,未创建 linked 文件 libSDL2-2.0.so

我的解决方案是以 Release 模式而不是 Debug 使用 cmake -DCMAKE_BUILD_TYPE=Release 重建库:这样所有文件库都是正确的。另一种解决方案可能是手动 symlink 文件,但很容易弄乱某些东西。

所以 SDL cmake 编写调试构建类型的指令似乎是一个错误,因为在发布模式下我的程序 运行。

如果有人有更好的解决方案或发现任何我找不到的错误,请告诉我。