我正在尝试在 Linux 机器上安装没有 root 权限的 Zsh。我下载了源 tarball 并运行:
./configure --prefix=<my_installation_path>
但后来我得到:
配置:错误:“在您的系统上找不到终端处理库。这可能是一个名为curses或ncurses的库。您可能需要在系统上安装一个名为“curses-devel”或“ncurses-devel”的软件包”
安装 ncurses:
由于我不是这个系统的root用户,所以我手动下载ncurses
并安装了它(也使用./configure --prefix=<my_installation_path>
),这似乎进展顺利。
然后我更新了以下路径:
INSTALLATION_PATH='/path/to/installation'
export PATH=$INSTALLATION_PATH/bin/:$PATH
export LD_LIBRARY_PATH=$INSTALLATION_PATH/lib:$LD_LIBRARY_PATH
export CFLAGS=-I$INSTALLATION_PATH/include
并尝试再次安装 Zsh,但出现相同的ncurses
错误。据我所知,上面的路径变量指向正确的位置,我可以在 shell 上检查这一点。为什么Zsh无法识别ncurses?
答案1
我发现至少缺少一件事:您正在传递CFLAGS=-I/path/to/installation/include
,它可以让编译脚本找到头文件,但您还需要让编译脚本找到要链接的库(libncurses.a
)。安装说明还说用于CPPFLAGS
包含目录,而不是CFLAGS
.
export CPPFLAGS="-I$INSTALLATION_PATH/include" LDFLAGS="-L$INSTALLATION_PATH/lib"
请务必阅读 中的完整错误消息./configure
,并检查其中包含更多信息的日志(有运行的命令及其输出config.log
的详细记录)。configure
答案2
更新:
按照吉尔斯的回答,我进行了更新CPPFLAGS
,LDFLAGS
并且问题在 期间消失了configure
。
但是,我现在在以下过程中遇到错误make
:
<INSTALLATION_PATH>/lib/libncurses.a: could not read symbols: Bad value
collect2: ld returned 1 exit status
我也得到一个recompile with -fPIC
.我猜这指的是ncurses
.我认为这意味着我构建ncurses
为静态,我应该将其构建为动态?我该怎么做呢?
更新2:
我又重新编译了ncurses
一遍。这次,我做了:
export CXXFLAGS=" -fPIC"
export CFLAGS=" -fPIC"
先于,make
然后添加--enable-shared
到./configure
和ncurses
。Zsh
这似乎已经解决了问题!