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