我有 vim.basic 可执行文件的符号链接:
⤷ ls -l /etc/alternatives/vim
lrwxrwxrwx 1 root root 18 Apr 22 21:02 /etc/alternatives/vim -> /usr/bin/vim.basic
上述符号链接的另一个符号链接为:
⤷ ls -l /usr/bin/vim
lrwxrwxrwx 1 root root 21 Apr 22 21:02 /usr/bin/vim -> /etc/alternatives/vim
它们的系统配置符合我对更新替代方案的期望,除了有时从 linux 内核 5.4 启动或通常从 4.15 使用相同的 root 和 home 分区启动之外,我没有更改任何内容,这可能是什么导致了使用 sudo 运行 vim 时出现问题? :
⤷ sudo vim.basic #This works fine!
⤷ sudo /etc/alternatives/vim #This works fine!
⤷ sudo vim
vim: error while loading shared libraries: libncurses.so.6: cannot open shared object file: No such file or directory
libncurses.so 安装在 LD_LIBRARY_PATH 指向的路径中:
⤷ echo $LD_LIBRARY_PATH
/home/akd/dotapps/local/lib:
⤷ ls -l /home/akd/dotapps/local/lib/libncurses.so.6
lrwxrwxrwx 1 akd akd 17 Nov 9 21:24 /home/akd/dotapps/local/lib/libncurses.so.6 -> libncurses.so.6.2
我似乎无法理解为什么双符号链接在 sudo vim 操作上找不到 libcurses.so.6 。没有 sudo 的普通 vim 二进制文件可以按预期工作(不抱怨 ncurses lib)。
⤷ vim --version
VIM - Vi IMproved 8.2 (2019 Dec 12, compiled Feb 16 2021 13:33:23)
⤷ sudo --version
Sudo version 1.8.21p2
Sudoers policy plugin version 1.8.21p2
Sudoers file grammar version 46
Sudoers I/O plugin version 1.8.21p2
知道为什么会有这种奇怪的行为吗?
更新:
根据要求添加更多信息:
⤷ ldd $(which vim)
linux-vdso.so.1 (0x00007ffc9a2a6000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f9d5e059000)
libncurses.so.6 => /home/akd/dotapps/local/lib/libncurses.so.6 (0x00007f9d5ddee000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f9d5dbea000)
libpython3.6m.so.1.0 => /usr/lib/x86_64-linux-gnu/libpython3.6m.so.1.0 (0x00007f9d5d53f000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f9d5d320000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f9d5cf2f000)
/lib64/ld-linux-x86-64.so.2 (0x00007f9d5e909000)
libexpat.so.1 => /lib/x86_64-linux-gnu/libexpat.so.1 (0x00007f9d5ccfd000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007f9d5cae0000)
libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007f9d5c8dd000)
答案1
看起来您已经安装libncurses.so
在akb
的主目录中,并通过添加到 使其export ENVIRONMENT=/home/akb/.../lib
可用/home/akb/.bashrc
。
这都是特定于用户的。如果您以另一个用户 ( ) 的身份运行它sudo -u akc vim
,您会遇到用户akc
没有读取权限,/home/akb
因此akc
无法读取库的问题。环境也会刷新,因此您export
所在的任何内容/home/akb/.bashrc
都不会应用。
为了解决这个问题,您需要在libncurses.so
系统范围内进行安装。推荐的选项是使用您的发行版附带的版本(示例):
sudo apt install libncurses6
但你有一个本地副本,我认为这是有原因的。在这种情况下,您需要在系统范围内安装它:
./configure
make
sudo make install DESTDIR=/usr/local
我是对你发布的vim
. vim.basic
8.2 在 debian 上不依赖于ncurses
.如果您是从源代码构建/安装的,那么您很可能缺少此运行时依赖项。但如果您通过包安装,那么我希望您的包管理器自动安装所有配置的运行时依赖项。因此,这听起来像是./configure
构建包时传递给的错误标志,或者缺少Depends:
您应该通知包维护者的标志。