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
编写调试构建类型的指令似乎是一个错误,因为在发布模式下我的程序 运行。
如果有人有更好的解决方案或发现任何我找不到的错误,请告诉我。
我开发了一个使用 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
编写调试构建类型的指令似乎是一个错误,因为在发布模式下我的程序 运行。
如果有人有更好的解决方案或发现任何我找不到的错误,请告诉我。