使用 ncurses 而不安装它

Posted

技术标签:

【中文标题】使用 ncurses 而不安装它【英文标题】:using ncurses without installing it 【发布时间】:2020-02-20 17:21:23 【问题描述】:

我正在做一个使用 ncurses 的项目。我想知道是否有一种方法可以在不将其安装在机器上的情况下使用该库?我的意思是,除了安装它,有没有办法拥有 .h 文件并将它们编译到 makefile 中并使用它们? 非常感谢您的回复

【问题讨论】:

好吧,您需要将完整的 curses 包编译成可以链接的库(libncurseslibforms 等...)。可以,但除非您需要最新的 ncurses 开发版本,否则我会安装现成的软件包。 其实我写的这个程序需要在大学机器上运行,而那些机器不支持ncurses,所以我需要这样做 好吧,你不需要头文件来运行你的程序,所以忘记那些。如果大学机器有一个 termcap 数据库,我敢打赌 ncurses 是支持的。你的程序是在兼容的机器上编译的吗?您是否与 curses 库静态链接? (见下面@Jabberwocky 的链接) ***.com/questions/3514852/… ? @TedLyngmo 现在我已经使用了安装在我计算机中的库,并且我没有静态链接 【参考方案1】:

看来您需要自己构建它,所以可以这样做:

创建一个目录,您可以在其中本地安装您下载、构建和安装的外部包。它们通常默认为/usr/local,但我假设您没有管理员权限,因此您可以在您的主目录中创建一个local
cd ~
mkdir local
如果您以前没有,您可以为您下载的存储库创建一个目录:
mkdir ~/repos
cd ~/repos
克隆ncurses
git clone https://github.com/mirror/ncurses.git
cd ncurses
配置ncurses 这会将其配置为安装在您新创建的 local 目录中,具有宽字符 (UTF-8) 和线程支持。您可以尝试其他选项(但请注意,它会影响目录和库的命名)。它还配置ncurses 以创建静态库(这是默认设置)。
./configure --prefix ~/local --enable-widec --with-pthread

构建和安装:

make -j
make -j install

您的~/local 目录现在应该如下所示:

bin  include  lib  share

编译自己的程序时,添加-I ~/local/include -I ~/local/include/ncursestw -L ~/local/lib 到命令行。注意目录上的t(对于threads)和w(对于wide)。

链接时,需要链接ncursestwdlpthread

例子:

g++ -I ~/local/include -I ~/local/include/ncursestw -L ~/local/lib \ 
                       -o prog prog.cpp -lncursestw -ldl -pthread

请注意,与pthread 库的链接最好使用-pthread 而不是-lpthread (*)

【讨论】:

非常感谢您的回答和您为此付出的时间...我在我的计算机上进行了测试,一切正常...我只需要在 uni 中测试它...只有一个小问题:我必须做#include <curses.h>#include ""local/include/ncursestw/curses.h" 吗?因为我两者都做了,而且效果很好,但问题是我的机器上已经安装了 ncurses。 很高兴它有帮助!标志 -I ~/local/include -I ~/local/include/ncursestw 在那里,所以编译器也会在这些目录中寻找 curses.h,所以 <curses.h> 就足够了。 一个警告:您可能需要在 uni 计算机上重新执行此过程。为一个平台编译的一个程序通常不会在另一个平台上运行,所以带上你的源代码,下载 ncurses 并在那里重新编译所有东西。

以上是关于使用 ncurses 而不安装它的主要内容,如果未能解决你的问题,请参考以下文章

Ncurses入门-安装与使用

NCurses – getstr() 和功能键

无法使用 CMake 和 ncurses 进行编译

ubuntu16.04安装ncurses-devel

Linux系统下安装ncurses库

Ncurses入门- 使用键盘