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

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

【问题讨论】:

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

标签: c++ c makefile ncurses


【解决方案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 并在那里重新编译所有东西。
猜你喜欢
  • 2012-02-22
  • 2015-03-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多