LINUX.ORG.RU
ФорумTalks

А в вашем дистрибутиве пакет libncurses предоставляет libcurses.so?

 , ,


0

1

Собственно, сабж.

Как внезапно выясняется, "-lcurses" теперь работает не во всех дистрибутивах. Да, и в таких дистрибутивах можно делать «ln -s libncurses.so libcurses.so», но тогда такое не будет работать у других юзеров таких же дистрибутивов пока они не выполнят такую же операцию.

К дистрибутивам, в которых "-lcurses" работает из коробки, относятся Mageia и LFS. К дистрибутивам, в которых из коробки не работает "-lcurses", относится openSUSE. Да, в openSUSE есть /usr/lib64/libcurses.so.1 как часть пакета termcap, но ссылка libcurses.so на этот файл всё равно не создаётся, а если бы и создавалась, то оно бы не работало бы. У неё совсем другое содержимое. Ссылка libcurses.so должна вести именно на libncurses.so.

★★★★★
Ответ на: комментарий от Reset

Вручную, конечно, ничто не мешает. Однако, есть софт, Makefile'ы которого делают "-lcurses". В т.ч. я и сам обычно прописывал в Makefile'ы именно "-lcurses". Конечно, Makefile'ы чужого софта можно патчить, а свои Makefile'ы переписать. Однако, "-lcurses" вполне относится к стандартам и, теоретически, и так должно везде работать. Отсутствие "-lcurses" из коробки как бы нарушает эти стандарты.

saahriktu ★★★★★
() автор топика

Slackware 14.2: libcurses -> libncurses.

xaizek ★★★★★
()
# pacman -Qo /usr/lib/libcurses.so 
/usr/lib/libcurses.so is owned by ncurses 6.2-1
# ls -la /usr/lib/libcurses.so 
lrwxrwxrwx 1 root root 13 Feb 13  2020 /usr/lib/libcurses.so -> libncurses.so
ados ★★★★★
()
Последнее исправление: ados (всего исправлений: 1)

Речь идёт о «работает сборка» или «работает собранный бинарник»?

Ведь после линковки в бинарнике ссылка уже идёт вроде бы на версию с .so.ЦИФРА, а .so используется лишь для сборки.

Например в debian .so без цифры не поставится, пока не поставшишь -dev пакет. А dev-пакет нужен только для разработки, а не для использования

https://packages.debian.org/buster/amd64/libncurses5/filelist

https://packages.debian.org/buster/amd64/libncurses6/filelist

https://packages.debian.org/buster/amd64/libncurses-dev/filelist

lrwxrwxrwx 1 root root     12 сен 20 12:16 /usr/lib/x86_64-linux-gnu/libcurses.a -> libncurses.a
lrwxrwxrwx 1 root root     13 сен 20 12:16 /usr/lib/x86_64-linux-gnu/libcurses.so -> libncurses.so
-rw-r--r-- 1 root root 168102 сен 20 12:16 /usr/lib/x86_64-linux-gnu/libncurses++.a
-rw-r--r-- 1 root root 316204 сен 20 12:16 /usr/lib/x86_64-linux-gnu/libncurses.a
-rw-r--r-- 1 root root     31 сен 20 12:16 /usr/lib/x86_64-linux-gnu/libncurses.so
-rw-r--r-- 1 root root 168102 сен 20 12:16 /usr/lib/x86_64-linux-gnu/libncurses++w.a
-rw-r--r-- 1 root root 438516 сен 20 12:16 /usr/lib/x86_64-linux-gnu/libncursesw.a
-rw-r--r-- 1 root root     32 сен 20 12:16 /usr/lib/x86_64-linux-gnu/libncursesw.so
user@host ~ % cat /usr/lib/x86_64-linux-gnu/libncurses.so
INPUT(libncurses.so.6 -ltinfo)

То есть после сборки с -lcurses при выборе динамической библиотеки бинарник будет искать libncurses.so.6

GPFault ★★
()

$ dpkg -S libcurses.so

libncurses-dev:amd64: /usr/lib/x86_64-linux-gnu/libcurses.so

$ ls -l /usr/lib/x86_64-linux-gnu/libcurses.so

lrwxrwxrwx 1 root root 13 фев 26 2020 /usr/lib/x86_64-linux-gnu/libcurses.so -> libncurses.so

$ lsb_release -d

Description: Ubuntu 20.04.1 LTS

keinu
()
Ответ на: комментарий от keinu

Прикольно, в Debian вот так:

dpkg -S libcurses.so
dpkg-query: no path found matching pattern *libcurses.so*

dpkg -S libncurses.so
libncurses6:amd64: /lib/x86_64-linux-gnu/libncurses.so.6
libncurses6:amd64: /lib/x86_64-linux-gnu/libncurses.so.6.1

Gonzo ★★★★★
()
Ответ на: комментарий от Gonzo

dpkg ищет только по уже установленным пакетам:

jet@pc:~/src$ dpkg -S libcurses.so
libncurses-dev:amd64: /usr/lib/x86_64-linux-gnu/libcurses.so
jet@pc:~/src$ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux 10 (buster)
Release:        10
Codename:       buster
Jetty ★★★★★
()

В бинарных дистрибутивах уже очень давно принято предоставлять .so в виде ссылки на .so.x.y.z только в dev-пакетах.

urpmf libcurses.so
lib64ncurses-devel:/usr/lib64/libcurses.so                                                                                  
libncurses-devel:/usr/lib/libcurses.so

ls -l /usr/lib64/libcurses.so 
lrwxrwxrwx 1 root root 14 окт 25  2018 /usr/lib64/libcurses.so -> libncursesw.so*

gremlin_the_red ★★★★★
()

Gentoo

~ $ equery f sys-libs/ncurses|grep lib|grep -v pkg |xargs file 
/lib64:                         cannot open `\033[01m/lib64\033[39;49;00m' (No such file or directory)
/lib64/libncurses.so.6:                       symbolic link to libncurses.so.6.2
/lib64/libncurses.so.6.2:                     ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, stripped
/lib64/libncursesw.so.6:                      symbolic link to libncursesw.so.6.2
/lib64/libncursesw.so.6.2:                    ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, stripped
/lib64/libtinfo.so.6:                         symbolic link to libtinfo.so.6.2
/lib64/libtinfo.so.6.2:                       ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, stripped
/lib64/libtinfow.so.6:                        symbolic link to libtinfow.so.6.2
/lib64/libtinfow.so.6.2:                      ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, stripped
/usr/lib:                       cannot open `\033[01m/usr/lib\033[39;49;00m' (No such file or directory)
/usr/lib/libcurses.so:                        symbolic link to libncurses.so
/usr/lib/libform.so:                          symbolic link to libform.so.6
/usr/lib/libform.so.6:                        symbolic link to libform.so.6.2
/usr/lib/libform.so.6.2:                      ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, stripped
/usr/lib/libformw.so:                         symbolic link to libformw.so.6
/usr/lib/libformw.so.6:                       symbolic link to libformw.so.6.2
/usr/lib/libformw.so.6.2:                     ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, stripped
/usr/lib/libmenu.so:                          symbolic link to libmenu.so.6
/usr/lib/libmenu.so.6:                        symbolic link to libmenu.so.6.2
/usr/lib/libmenu.so.6.2:                      ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, stripped
/usr/lib/libmenuw.so:                         symbolic link to libmenuw.so.6
/usr/lib/libmenuw.so.6:                       symbolic link to libmenuw.so.6.2
/usr/lib/libmenuw.so.6.2:                     ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, stripped
/usr/lib/libncurses++.so:                     symbolic link to libncurses++.so.6
/usr/lib/libncurses++.so.6:                   symbolic link to libncurses++.so.6.2
/usr/lib/libncurses++.so.6.2:                 ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, stripped
/usr/lib/libncurses++w.so:                    symbolic link to libncurses++w.so.6
/usr/lib/libncurses++w.so.6:                  symbolic link to libncurses++w.so.6.2
/usr/lib/libncurses++w.so.6.2:                ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, stripped
/usr/lib/libncurses.so:                       symbolic link to libncurses.so.6
/usr/lib/libncurses.so.6:                     symbolic link to libncurses.so.6.2
/usr/lib/libncurses.so.6.2:                   ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, stripped
/usr/lib/libncursesw.so:                      symbolic link to libncursesw.so.6
/usr/lib/libncursesw.so.6:                    symbolic link to libncursesw.so.6.2
/usr/lib/libncursesw.so.6.2:                  ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, stripped
/usr/lib/libpanel.so:                         symbolic link to libpanel.so.6
/usr/lib/libpanel.so.6:                       symbolic link to libpanel.so.6.2
/usr/lib/libpanel.so.6.2:                     ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, stripped
/usr/lib/libpanelw.so:                        symbolic link to libpanelw.so.6
/usr/lib/libpanelw.so.6:                      symbolic link to libpanelw.so.6.2
/usr/lib/libpanelw.so.6.2:                    ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, stripped
/usr/lib/libtinfo.so:                         symbolic link to libtinfo.so.6
/usr/lib/libtinfo.so.6:                       symbolic link to libtinfo.so.6.2
/usr/lib/libtinfo.so.6.2:                     ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, stripped
/usr/lib/libtinfow.so:                        symbolic link to libtinfow.so.6
/usr/lib/libtinfow.so.6:                      symbolic link to libtinfow.so.6.2
/usr/lib/libtinfow.so.6.2:                    ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), dynamically linked, stripped
/usr/lib/terminfo:                            symbolic link to ../share/terminfo
/usr/lib64:                     cannot open `\033[01m/usr/lib64\033[39;49;00m' (No such file or directory)
/usr/lib64/libcurses.so:                      symbolic link to libncurses.so
/usr/lib64/libform.so:                        symbolic link to libform.so.6
/usr/lib64/libform.so.6:                      symbolic link to libform.so.6.2
/usr/lib64/libform.so.6.2:                    ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, stripped
/usr/lib64/libformw.so:                       symbolic link to libformw.so.6
/usr/lib64/libformw.so.6:                     symbolic link to libformw.so.6.2
/usr/lib64/libformw.so.6.2:                   ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, stripped
/usr/lib64/libmenu.so:                        symbolic link to libmenu.so.6
/usr/lib64/libmenu.so.6:                      symbolic link to libmenu.so.6.2
/usr/lib64/libmenu.so.6.2:                    ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, stripped
/usr/lib64/libmenuw.so:                       symbolic link to libmenuw.so.6
/usr/lib64/libmenuw.so.6:                     symbolic link to libmenuw.so.6.2
/usr/lib64/libmenuw.so.6.2:                   ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, stripped
/usr/lib64/libncurses++.so:                   symbolic link to libncurses++.so.6
/usr/lib64/libncurses++.so.6:                 symbolic link to libncurses++.so.6.2
/usr/lib64/libncurses++.so.6.2:               ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, stripped
/usr/lib64/libncurses++w.so:                  symbolic link to libncurses++w.so.6
/usr/lib64/libncurses++w.so.6:                symbolic link to libncurses++w.so.6.2
/usr/lib64/libncurses++w.so.6.2:              ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, stripped
/usr/lib64/libncurses.so:                     ASCII text
/usr/lib64/libncursesw.so:                    ASCII text
/usr/lib64/libpanel.so:                       symbolic link to libpanel.so.6
/usr/lib64/libpanel.so.6:                     symbolic link to libpanel.so.6.2
/usr/lib64/libpanel.so.6.2:                   ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, stripped
/usr/lib64/libpanelw.so:                      symbolic link to libpanelw.so.6
/usr/lib64/libpanelw.so.6:                    symbolic link to libpanelw.so.6.2
/usr/lib64/libpanelw.so.6.2:                  ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, stripped
/usr/lib64/libtinfo.so:                       ASCII text
/usr/lib64/libtinfow.so:                      ASCII text
/usr/lib64/terminfo:                          symbolic link to ../share/terminfo
/usr/share/terminfo/.keep_sys-libs_ncurses-0: empty
boowai ★★★★
()
Ответ на: комментарий от saahriktu

Gentoo. Окей, всё же есть симлинк. Но сути дела это не меняет.

Всё что было нужно - уже портировали. Всё что не было нужно - закопали.

И линковка руками - маргинальный случай. Так никто в здравом уме не делает, как раз из соображений совместимости. Эта задача ложится на плечи CMake/Autotools и pkg-config.

anonymous-angler ★☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.