在我的 Ubuntu 16.04.2 LTS 上,当我运行 dbus-uuidgen 时,它返回:
dbus-uuidgen:/usr/local/lib/libdbus-1.so.3:找不到版本“LIBDBUS_PRIVATE_1.10.8”(dbus-uuidgen 需要)
该文档说它应该:
打印一个凭空生成的新uuid。
但我有一个 /usr/local/lib/libdbus-1.so.3 作为 /usr/local/lib/libdbus-1.so.3.16.4 的链接
这个问题是在我从源代码安装 dbus 和 bluez 并重新启动系统后发生的,因此某些服务(如登录服务)无法在启动时加载,因此我必须从恢复模式中删除 dbus 和 bluez 以及某些依赖项(以及 ubuntu-desktop),让登录服务启动并以普通用户身份登录,然后再次重新安装 dbus。但现在每当我尝试使用 apt-get 安装任何内容时,dbus-uuid 错误都会导致安装停止。我发现奇怪的是 /var/lib/dbus/machine-id 和 /etc/machine-id 文件在重新启动时包含一个 ID。我相信这证明了 dbus-uuidgen 在启动时工作。
输出样本:
$sudo apt-get install bluez
Reading package lists...
Building dependency tree...
Reading state information...
The following additional packages will be installed:
dbus
Suggested packages:
dbus-user-session | dbus-x11
The following NEW packages will be installed:
bluez dbus
0 upgraded, 2 newly installed, 0 to remove and 0 not upgraded.
Need to get 1,041 kB of archives.
After this operation, 4,767 kB of additional disk space will be used.
Do you want to continue? [Y/n] Get:1 http://ma.archive.ubuntu.com/ubuntu xenial-updates/main amd64 dbus amd64 1.10.6-1ubuntu3.3 [142 kB]
Get:2 http://ma.archive.ubuntu.com/ubuntu xenial/main amd64 bluez amd64 5.37-0ubuntu5 [899 kB]
Fetched 1,041 kB in 2s (383 kB/s)
Selecting previously unselected package dbus.
(Reading database ...
(Reading database ... 5%
(Reading database ... 10%
(Reading database ... 15%
(Reading database ... 20%
(Reading database ... 25%
(Reading database ... 30%
(Reading database ... 35%
(Reading database ... 40%
(Reading database ... 45%
(Reading database ... 50%
(Reading database ... 55%
(Reading database ... 60%
(Reading database ... 65%
(Reading database ... 70%
(Reading database ... 75%
(Reading database ... 80%
(Reading database ... 85%
(Reading database ... 90%
(Reading database ... 95%
(Reading database ... 100%
(Reading database ... 270712 files and directories currently installed.)
Preparing to unpack .../dbus_1.10.6-1ubuntu3.3_amd64.deb ...
Unpacking dbus (1.10.6-1ubuntu3.3) ...
Selecting previously unselected package bluez.
Preparing to unpack .../bluez_5.37-0ubuntu5_amd64.deb ...
Unpacking bluez (5.37-0ubuntu5) ...
Processing triggers for systemd (229-4ubuntu17) ...
Processing triggers for ureadahead (0.100.0-19) ...
ureadahead will be reprofiled on next reboot
Processing triggers for man-db (2.7.5-1) ...
Setting up dbus (1.10.6-1ubuntu3.3) ...
dbus-uuidgen: /usr/local/lib/libdbus-1.so.3: version LIBDBUS_PRIVATE_1.10.18' not found (required by dbus-uuidgen)
dpkg: error processing package dbus (--configure):
subprocess installed post-installation script returned error exit status 1
dpkg: dependency problems prevent configuration of bluez:
bluez depends on dbus; however:
Package dbus is not configured yet.
dpkg: error processing package bluez (--configure):
dependency problems - leaving unconfigured
Errors were encountered while processing:
dbus
bluez
答案1
我设法通过以下方式解决了该问题:
- 运行
dpkg --remove --force-depends libdbus-1-3
。删除 libdbus-1-3 而不删除其依赖项。 - 运行
make clean
以删除我在尝试解决问题时安装的每个 dbus 版本的剩余内容。 - 评论我在文件中的 deb-src 条目
/etc/apt/sources.list
。 apt-get clean
使用和清理本地存储库apt-get autoclean
。 - 运行apt-get install -f
以尝试修复损坏的依赖项。- 由于安装 dbus 使用
apt-get install dbus
失败,因为dbus-uuidgen错误,我曾经apt-get source
拿到源码包然后手动安装,安装成功没有任何错误。现在dbus-uuidgen
工作了,并打印了一个字符串。
我不太确定是什么解决了这个问题,但我认为我使用 libdbus-1-3 库安装了不同版本的 dbus,该库仅适用于 dbus 版本 1.10.6-ubun amd64 (适用于 ubuntu),而且看起来就我而言,只有这个版本适用于我的发行版。我相信@Gilles 的解释更准确。
答案2
您有两个不同版本的dbus-uuidgen
可执行文件及其使用的库libdbus-1.so.3
,尽管文件名相同,但这些版本不是二进制兼容的。 (这可能是由于不同的编译选项造成的,但这只是一个疯狂的猜测,不知道您的构建是如何配置的。)您需要确保/usr/bin/dbus-*
仅使用来自或 的libdbus-*
库,并且仅使用来自 的库。/lib
/usr/lib
/usr/bin/dbus-*
libdbus-*
/usr/local/lib
我建议您不要安装/usr/local
与核心系统程序和库(例如D-Bus)冲突的程序。如果您需要其他版本进行测试,请将其安装在不在可执行文件或库搜索路径上的单独目录中。