使用ncurses lib编译C时,-lcurses和-lcucurses有什么区别?

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

感谢帮助!

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

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

在我的OpenSUSE 12.3框中,没有安装了ncurses的libcurses链接。 在将标志更改为-lncurses之前,任何尝试使用-lcurses标志的C程序都将失败。

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++wa -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)是等效的。