В чем разница между -lcurses и -lncurses при компиляции C с использованием ncurses lib?

Я изучаю C и играю с библиотекой ncurses. Я видел ссылки как на -lcurses, так и на -lncurses, но пока не нашел никаких различий (оба работают при компиляции).

Цените помощь!


person mutenewt    schedule 05.10.2009    source источник


Ответы (4)


ncurses — это открытый клон оригинальной библиотеки Unix curses. libcurses.* обычно указывает на libncurses.*, чтобы обеспечить совместимость с исходной библиотекой, поэтому не будет никакой практической разницы между использованием одного над другим.

Если на самом деле у вас установлено более одной библиотеки типа curses, -lcurses фактически свяжет вашу программу с библиотекой по умолчанию, тогда как -lncurses явно выберет реализация ncurses.

person goldPseudo    schedule 05.10.2009
comment
В таких системах, как Solaris, libcurses.so является оригинальной (Unix) библиотекой curses (или расширенной библиотекой curses, но не библиотекой GNU libncurses). В системах Linux нет никакой разницы. - person Jonathan Leffler; 05.10.2009
comment
@JonathanLeffler: То же самое и для других платформ, таких как IBM AIX, здесь не ncurses, а оригинальные или расширенные curses. - person Luciano; 26.10.2016

На моем компьютере с OpenSUSE 12.3 нет ссылок на libcurses с установленным ncurses. Любые программы на C, пытающиеся использовать флаг -lcurses, завершатся ошибкой, пока вы не измените флаг на -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

Ссылки также отсутствуют в 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.

person Earl Ruby    schedule 25.09.2013

В моей системе (Slackware64 13.0) libcurses.so и друзья — это просто символические ссылки на эквивалент ncurses, так что разницы нет. Имя libcurses.so (-lcurses), вероятно, просто для обеспечения обратной совместимости с кодом, разработанным для других систем, которые имеют реализацию curses, отличную от ncurses.

person Michael Ekstrand    schedule 05.10.2009

На моем ПК (fedora 11) файл /usr/lib/libcurses.so содержит: «INPUT(-lncurses)». Я думаю, это означает, что две формы (-lcurses, -lncurses) эквивалентны.

person sambowry    schedule 05.10.2009