【问题标题】:What's the difference between -lcurses and -lncurses when compiling C using ncurses lib?使用 ncurses lib 编译 C 时 -lcurses 和 -lncurses 有什么区别?
【发布时间】:2010-12-03 19:36:03
【问题描述】:

我正在学习 C 并使用 ncurses 库。我已经看到对 -lcurses 和 -lncurses 的引用,但我还没有发现任何差异(编译时两者都有效)。

感谢您的帮助!

【问题讨论】:

    标签: c ncurses


    【解决方案1】:

    在我的 OpenSUSE 12.3 机器上,没有安装 ncurses 的 libcurses 链接。任何尝试使用 -lcurses 标志的 C 程序都会失败,直到您将该标志更改为 -lncurses。

    OpenSUSE 12.3 > ls -al /usr/lib64/*curses*
    -rw-r--r-- 1 root root 2225910 Jan 25  2013 /usr/lib64/libncurses.a
    -rw-r--r-- 1 root root  780540 Jan 25  2013 /usr/lib64/libncurses++.a
    -rw-r--r-- 1 root root      69 Jan 25  2013 /usr/lib64/libncurses.so
    -rw-r--r-- 1 root root  782884 Jan 25  2013 /usr/lib64/libncurses++w.a
    -rw-r--r-- 1 root root 2768222 Jan 25  2013 /usr/lib64/libncursesw.a
    -rw-r--r-- 1 root root      70 Jan 25  2013 /usr/lib64/libncursesw.so
    

    Fedora 17 上也缺少链接。但是,在 Ubuntu 13.04 上,链接存在:

    Ubuntu 13.04 > ls -al /usr/lib/x86_64-linux-gnu/*curses*
    lrwxrwxrwx 1 root root     12 Feb  8  2013 /usr/lib/x86_64-linux-gnu/libcurses.a -> libncurses.a
    lrwxrwxrwx 1 root root     13 Feb  8  2013 /usr/lib/x86_64-linux-gnu/libcurses.so -> libncurses.so
    -rw-r--r-- 1 root root 294180 Feb  8  2013 /usr/lib/x86_64-linux-gnu/libncurses.a
    -rw-r--r-- 1 root root 158798 Feb  8  2013 /usr/lib/x86_64-linux-gnu/libncurses++.a
    -rw-r--r-- 1 root root     31 Feb  8  2013 /usr/lib/x86_64-linux-gnu/libncurses.so
    

    所以在 OpenSUSE 和 Fedora 上使用 -lcurses 编译会失败,但在 Ubuntu 上可以。使用 -lncurses 编译将适用于所有三个发行版。

    要点:如果您希望您的代码在不同的 Linux 发行版上编译,您应该使用 -lncurses。

    【讨论】:

      【解决方案2】:

      ncurses 是原始 Unix curses 库的开源克隆。 libcurses.* 通常指向 libncurses.* 以提供与原始库的兼容性,因此使用一个与另一个相比没有实际区别。

      如果您确实安装了多个“curses-type”库,-lcurses 实质上会将您的程序链接到默认库,而 -lncurses 会明确选择 ncurses 实现。

      【讨论】:

      • 在 Solaris 等系统上,libcurses.so 是原始 (Unix) 的 curses 库(或增强的 curses 库,但不是 GNU libncurses 库)。在 Linux 系统上,没有区别。
      • @JonathanLeffler:对于 IBM AIX 等其他平台也是如此,没有 ncurses,而是原始或增强的 curses。
      【解决方案3】:

      在我的 (fedora 11) PC 上 /usr/lib/libcurses.so 包含:“INPUT(-lncurses)”。我认为这意味着这两种形式(-lcurses,-lncurses)是等价的。

      【讨论】:

        【解决方案4】:

        在我的系统 (Slackware64 13.0) 上,libcurses.so 和朋友只是到 ncurses 等效项的符号链接,所以没有区别。 libcurses.so (-lcurses) 名称可能只是为了提供与为其他系统设计的代码的向后兼容性,这些系统具有除 ncurses 之外的 curses 实现。

        【讨论】:

          猜你喜欢
          • 2018-07-11
          • 2017-02-11
          • 1970-01-01
          • 1970-01-01
          • 2011-02-13
          • 1970-01-01
          • 1970-01-01
          • 2014-08-10
          • 1970-01-01
          相关资源
          最近更新 更多