【发布时间】:2010-12-03 19:36:03
【问题描述】:
我正在学习 C 并使用 ncurses 库。我已经看到对 -lcurses 和 -lncurses 的引用,但我还没有发现任何差异(编译时两者都有效)。
感谢您的帮助!
【问题讨论】:
我正在学习 C 并使用 ncurses 库。我已经看到对 -lcurses 和 -lncurses 的引用,但我还没有发现任何差异(编译时两者都有效)。
感谢您的帮助!
【问题讨论】:
在我的 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。
【讨论】:
ncurses 是原始 Unix curses 库的开源克隆。 libcurses.* 通常指向 libncurses.* 以提供与原始库的兼容性,因此使用一个与另一个相比没有实际区别。
如果您确实安装了多个“curses-type”库,-lcurses 实质上会将您的程序链接到默认库,而 -lncurses 会明确选择 ncurses 实现。
【讨论】:
在我的 (fedora 11) PC 上 /usr/lib/libcurses.so 包含:“INPUT(-lncurses)”。我认为这意味着这两种形式(-lcurses,-lncurses)是等价的。
【讨论】:
在我的系统 (Slackware64 13.0) 上,libcurses.so 和朋友只是到 ncurses 等效项的符号链接,所以没有区别。 libcurses.so (-lcurses) 名称可能只是为了提供与为其他系统设计的代码的向后兼容性,这些系统具有除 ncurses 之外的 curses 实现。
【讨论】: