昨天我们开始遇到一些奇怪的问题;可能是由于 yum 安装失败所致?问题之一是 PS -ef 无限期挂起(实际上是查看其他用户状态的 ps 命令),已通过重新启动修复。然而我们仍然有两个问题。
尝试运行 vncserver 时出现错误:
Gtk-Message: Failed to load modle "canberra-gtk-module": libcanberra-gtk-module.so: cannot open shared object.
该错误有效;因为 libcanberra-gtk-module 在我们系统的任何地方都不存在。我只是从要加载的列表中删除该模块,因为我认为它是非强制性的,但我不知道是什么导致 vncserver 尝试加载它。
但更重要的错误是 GPG-agent。我们在几个地方收到错误,但归根结底是当我尝试运行 gpg-agent 时收到错误:
ImportError: /usr/local/lib/libgcrypt.so.11: undefined symbole: gog-err-set_errno
gpg-agent 手册页上列出的文件似乎都不存在。我们尝试重新安装 libgpg-error 软件包,但没有解决任何问题。知道什么会导致这种情况,或者如何调试它?
谢谢。
答案1
我解决了这个问题。问题是我的 LD_LIBRARY_PATH 变量为空。设置 LD_LIBRARY_PATH=/lib64 解决了问题,因为我的 libgpg_error SO 位于我的 /lib64 目录中。更准确地说,gpg-agent new 在哪里可以找到 libgpg_error.so (根据 LDD)。然而,gpg-agent 也使用了 libgcrypt。 Libgcrypt 无法找到 libgpg_error.so;由于 libgcrypt.so 在符号表上出现在 libgpg_error.so 之前,我认为 libgcrypt.so 首先加载并抛出,因为它尚未加载并且找不到 libgpg_error.so。设置 LD_LIBRARY_PATH 允许 libgcrypt 正确查找并加载 .so。
我在 /etc/profile.d/ 中设置了一个运行的小脚本
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH;/lib64
我还没有重新启动;但一旦发生,我相信每个人都应该解决这个问题。
如果有人能告诉我为什么百胜(如果百胜做到了)打破了这个,我很想知道。另外,我是否应该担心现在我的 LD_LIBRARY_PATH 仅包含 /lib64 路径?那里应该还有其他路径吗?我应该想知道为什么在添加脚本之前它是空的吗?
更新:我添加到 LD_LIBRARY_PATH 文件的解决方案并不完美,当我在 gnome 中打开终端时,LD_LIBRARY_PATH 仍然为空。解决这个问题的正确方法是将文件放入 /etc/ld.so.cache.d/ 目录中;该文件必须以 .conf 结尾(要被检测到)并包含以下行
/lib64
然后我以 root 身份运行 ldconfig。这正确地确保了 linux “自动检测”/lib64 中的所有 .so;根本不需要设置 LD_LIBRARY_PATH 。