7

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

感谢帮助!

4

4 回答 4

16

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

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

于 2009-10-05T00:25:44.870 回答
4

在我的 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

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

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

于 2013-09-25T00:15:48.560 回答
0

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

于 2009-10-05T00:22:16.357 回答
0

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

于 2009-10-05T00:23:06.747 回答