2009-10-05 86 views

回答

12

ncurses是原始Unix的開放源代碼克隆版本庫,其中包含原始Unix curses庫。 libcurses。*通常指向libncurses。*以提供與原始庫的兼容性,因此在使用一個庫時不會有實際區別。

如果你實際上有一個以上的「詛咒型」庫安裝,-lcurses將基本上你的程序鏈接到默認的,而-lncurses會明確地選擇ncurses的實現。

+2

在諸如Solaris的系統中,libcurses.so是原始(Unix)curses庫(或增強型curses庫,但不是GNU libncurses庫)。在Linux系統上,沒有區別。 – 2009-10-05 06:02:07

+0

@JonathanLeffler:對於IBM AIX等其他平臺也是如此,不存在ncurses,而是原始或增強的curses。 – Luciano 2016-10-26 13:15:49

0

在我的系統上(Slackware64 13.0),libcurses.so和朋友只是與ncurses等效的符號鏈接,所以沒有區別。 libcurses.so-lcurses)名稱可能只是爲了爲具有除ncurses以外的curses實現的其他系統設計的代碼提供向後兼容性。

0

在我的(fedora 11)PC上/usr/lib/libcurses.so包含:「INPUT(-lncurses)」。我認爲這意味着兩種形式(-lcurses,-lncurses)是等價的。

2

在我的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++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。

相關問題