我正在学习C并使用ncurses lib.我见过对-lcurses和-lcucurses的引用,但我还没有发现任何差异(在编译时都有效).
感谢帮助!
gol*_*udo 14
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
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。