我在 Arch Linux 系统上安装了 XChat。每次运行它时,我都会收到以下错误消息:
Python interface loaded
Perl interface loaded
AutoLoad failed for: /usr/lib/xchat/plugins/tcl.so
libtcl8.5.so: cannot open shared object file: No such file or directory
因此,虽然 Python 和 Perl 的插件已正确加载,但 Tcl 插件却未正确加载。事实上,我的系统上安装了python2
和软件包,而没有安装软件包。安装即可解决问题。perl
tcl
tcl
在安装之前tcl
,我得到:
ldd /usr/lib/xchat/plugins/tcl.so | grep tcl
libtcl8.5.so => not found
安装后tcl
,我得到:
ldd /usr/lib/xchat/plugins/tcl.so | grep tcl
libtcl8.5.so => /usr/lib/libtcl8.5.so (0x00007fceba533000)
看起来这tcl
不是 的必需依赖项xchat
,而是可选依赖项:
pacman -Qi xchat
...
Optional Deps : enchant: for spell checking support
tcl: for tcl plugin
python2: for python plugin
...
为什么会这样呢?也就是说,为什么默认情况tcl
下没有安装该软件包xchat
?没有就没有xchat
坏掉吗tcl
?
我提交了一份漏洞两年多前,但我从来没有真正理解为什么 Arch Linux 的土地上会出现这样的情况。请注意,虽然这个错误很旧,但几个月以来我只是每天运行这个发行版,所以我是一个 Arch Linux 新手。
我本可以在 Arch Linux 论坛或邮件列表上询问,但我很有兴趣了解其他 Linux 发行版用户的观点。当然,我们也欢迎 Arch Linux 用户。
编辑。
- 在未安装的情况下运行 XChat 时收到的错误消息
tcl
在 GUI 中清晰可见,与显示消息的位置相同。 - 我的问题也可以用以下方式重新表述:尽管 XChat 显然是使用脚本构建的
--enable-tcl
或等效传递给脚本configure
的,但为什么可以在不强制依赖于tcl
包的情况下安装 XChat?如果一个人不想tcl
,他就应该使用--disable-tcl
。
编辑。我开了一个线在Arch Linux论坛上,但我没有得到满意的答案。于是我检查了Debian和Gentoo,好像他们没有这个问题。
答案1
这主要是一个复杂性以及人们如何选择投入时间的问题。
如果您想要一个不显示与缺少插件库相关的任何警告/错误的 XChat 二进制包,您基本上有两种选择:
- 仅包含/配置“重要”插件,并添加这些东西所需的硬依赖项
- 包括每个可用的插件,并添加这些东西所需的硬依赖项
第一种选择会让您得到一个功能很少的 XChat 包。然后您需要一个xchat-perl
包、一个xchat-tcl
、一个xchat-gtk
……所有这些包都需要维护、修补、升级等。这需要做很多工作。
第二个选项为您提供了一个臃肿的 XChat 软件包,其中包含许多其他内容,其中大多数内容根本不会被普通用户使用。对于像 Arch 这样的发行版来说并不是很令人满意。
您可以尝试在这两者之间找到最佳平衡点,但很可能找不到完美的配合。
Arch 开发人员显然对该包所做的就是发布一个常用的插件,而不强迫用户安装依赖项。这(暂时忽略错误消息)实际上对用户来说非常好:那些不想要/不需要 TCL 的人不必安装它来获取 XChat。那些这样做的人只需安装 TCL,XChat TCL 插件就可以工作。
所以这是一个很好的妥协。如果您将来想要使用 TCL 编写 XChat 脚本,您所要做的就是安装 TCL - 您不必担心更新 XChat 或安装另一个软件包。
至于错误消息,它纯粹是装饰性的。可以修复吗?大概。
它是否可以轻松修复,仍然让插件在安装 TCL 后立即开始工作(无需额外的软件包或配置更改、反向依赖检查……):这还不确定。
Arch 开发人员/维护人员是否应该花时间尝试消除这个外观问题?这是有争议的。考虑到该软件可以正常工作,这应该是相当低的优先级。
可以你尝试以一种或另一种方式修复它?如果这对你来说足够重要的话,可能是这样。尝试一下:找到更好的方法来处理这些插件和依赖项,并提交错误或功能请求,或者进入适当的论坛/邮件列表来处理此类事情。
开源发行版不会靠魔法变得更好。如果您足够关心此事,请参与其中。
答案2
为什么 XChat 显然是使用 --enable-tcl 或传递给配置脚本的等效项构建的,但可以在不强制依赖 tcl 包的情况下安装?
您正在使用 Arch Linux。来自常见问题解答 -是什么让 Arch 如此独特......:
Arch 包装被设计为最小化,并且选修的包依赖关系永远不会自动安装。相反,用户只是在软件包安装过程中被告知它们的存在,从而使系统更加精简。
XChat包裹详情:
dbus-glib
gtk2
hicolor-icon-theme libnotify
openssl
enchant(可选) - 用于拼写检查支持
python2(可选) - 用于 python 插件
tcl(选修的) - 对于 tcl 插件
编辑:回复您的评论如下:
我不确定我是否明白您的意思...可选依赖项仅用于应用程序的某些特性/功能。如果不使用上述功能,则不需要这些依赖项。当出于各种原因,实际上不可能将包拆分为子模块时,通常会使用可选依赖项(子模块只有非可选依赖项,因为您需要所有这些依赖项才能使用该子模块)模块的功能)。包+子模块的一个例子是埃克塞莱。
现在,关于您收到的那个特定错误/警告消息......我认为马特在他的帖子中总结了这一点,我真的没有什么可补充的。