我正在学习C语言并使用ncurses库。我看到了-lcurses和-lncurses两个引用,但是我还没有找到它们之间的区别(编译时都可以正常工作)。
感谢您的帮助!
ncurses是原Unix curses库的开源克隆版本。通常情况下,libcurses.*指向libncurses.*以保持与原始库的兼容性,因此使用其中一个与另一个没有实际区别。
如果您安装了多个“curses类型”的库,-lcurses会将您的程序链接到默认库,而-lncurses则会显式地选择ncurses实现。
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
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
因此,在OpenSUSE和Fedora上编译时使用-lcurses会失败,但在Ubuntu上却可以。而使用-lncurses编译则适用于所有三个发行版。
要点:如果您希望您的代码能够在不同的Linux发行版上编译成功,应使用-lncurses。
libcurses.so
和相关文件只是符号链接到ncurses等效文件,因此没有区别。 libcurses.so
(-lcurses
)名称可能只是为了向为其他具有不同于ncurses的curses实现的系统设计的代码提供向后兼容性。