私はCを学び、ncurseslibで遊んでいます。-lcursesと-lncursesの両方への参照を見てきましたが、まだ違いは見つかりませんでした(どちらもコンパイル時に機能します)。
助けに感謝します!
ncursesは、元のUnixcursesライブラリのオープンソースクローンです。 libcurses。*は通常、元のライブラリとの互換性を提供するためにlibncurses。*を指しているため、どちらを使用しても実際的な違いはありません。
実際に複数の'curses-type'ライブラリがインストールされている場合、-lcursesは基本的にプログラムをデフォルトのライブラリにリンクしますが、-lncursesは明示的にncurses実装を選択します。
私のOpenSUSE12.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
リンクはFedora17でも欠落しています。ただし、Ubuntu13.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を使用したコンパイルは、3つのディストリビューションすべてで機能します。
要点:コードをさまざまなLinuxディストリビューションでコンパイルする場合は、-lncursesを使用する必要があります。
私のシステム(Slackware64 13.0)ではlibcurses.so
、友達はncursesに相当するものへの単なるシンボリックリンクであるため、違いはありません。()の名前はlibcurses.so
、-lcurses
おそらくncurses以外のcurses実装を持つ他のシステム用に設計されたコードとの下位互換性を提供するためのものです。
私の(fedora 11)PCでは、/ usr / lib / libcurses.soに「INPUT(-lncurses)」が含まれています。これは、2つの形式(-lcurses、-lncurses)が同等であることを意味すると思います。