我的终端(FREE BSD)默认使用 CShell,vim 在该 CShell 下工作正常。但要运行一些测试脚本,我必须使用 bash shell,其中定义了一些环境变量。一旦我进入 bash shell,如果我启动 vim,就会出现此错误
/libexec/ld-elf.so.1: Shared object "libgtk-12.so.2" not found, required by "vim"
vi 运行良好。有人能帮我解决这个问题吗?
答案1
一个合理的解释是,根据你运行的 shell,你有不同的环境变量设置。比较以下输出
echo $PATH
echo $LD_LIBRARY_PATH
在 bash 和 csh 下。可能包括您在 csh 中$LD_LIBRARY_PATH
的位置,但不包括在 bash 中的位置。或者可能导致csh 和 bash 中的可执行文件不同(一个在 bash 中需要 gtk,另一个在 csh 中不需要 gtk)。要检查这一点,请在 bash 和csh 下运行。libgtk-12.so.2
$PATH
vim
type vim
which vim
编辑:根据您的评论,有一个vim
对/volume/perl/bin/vim
您不起作用,但您还需要一些内容/volume/perl/bin
放在首位PATH
,可能perl
。您有几种解决方案:
把
/volume/perl/bin/vim
第一放进去$PATH
,然后把alias vim=/usr/local/bin/vim
你的.bashrc
和你的放进去.cshrc
。根本不要输入
/volume/perl/bin/vim
,$PATH
但要安排运行 perl 脚本而/volume/perl/bin/vim
不是本地 perl。根本不要输入
/volume/perl/bin/vim
。相反,先输入,然后从中创建指向所需内容的符号链接,例如。$PATH
~/bin
$PATH
/volume/perl/bin
~/bin
ln -s /volume/perl/bin/perl ~/bin
尝试设置
PERL5LIB
而不是PATH
,以防您需要的不是较新版本的 perl 而是一些额外的库。例如(调整到所需的任何目录;您可以通过运行setenv PERL5LIB /volume/perl/lib/perl/5.10
来查看 的默认目录)。/volume/perl/bin/perl
/volume/perl/bin/perl -le 'map print, @INC'
升级您的 perl 以便您的脚本可以与它们一起工作(也许是除了之前的建议之外)。
安装所需的库
/volume/perl/bin/vim
。vim
从......中去除/volume/perl/bin
。
无论你做什么,我都不建议PATH
在不同的 shell 中使用不同的设置,因为这样很快就会让人感到困惑(你已经注意到了)。PATH
在 中设置.login
(假设csh
是你的登录 shell,否则在 中.profile
)。
答案2
您提到了终端,但它抱怨的库是一个 GUI 库。您关心 GUI 吗?如果不关心,您可以强制不使用 GUI 并且不尝试加载此库,但我远不是 vim 专家。您甚至可以取消设置 DISPLAY,这样 vim 就必须在终端模式下运行。
正如其他人所回答的,这可能是你的 LD_LIBRARY_PATH,或者你使用的 vim 与你想象的不同。查看 bash 和 csh 中的设置,以及它们之间的区别
另外尝试该ldd
命令,它将显示您的应用程序能够加载哪些库。它应该在 bash 上失败以解析
在许多系统上,vi 和 vim 是两个独立的安装,vim 更适合常规编辑,而精简版、依赖性极少的版本称为 vi,用于紧急模式。我相信 vi 可以在任何一种系统中运行。