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

mut*_*ewt 8 c ncurses

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

感谢帮助!

gol*_*udo 14

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

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

  • 在Solaris等系统上,libcurses.so是原始(Unix)curses库(或增强的curses库,但不是GNU libncurses库).在Linux系统上,没有区别. (3认同)

Ear*_*uby 5

在我的 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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

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

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