@JustMoose
Программист. Радиолюбитель. Прокрастинатор ;)

В чём разница между статическими либами и пакетами?

Всем привет! Третий день в линуксе, слегка запутался.
Хочу я, к примеру, написать кусок кода (Си), который использует библиотеку.
Библиотека лежит в интернете.
(Для определённости пусть это будет fftw3).

Открываю свой список пакетов, вижу:
apt list --installed | grep "fft"
WARNING: apt does not have a stable CLI interface. Use with caution in scripts.
libfftw3-3/jammy,now 3.3.8-2ubuntu8 amd64 [installed]
libfftw3-bin/jammy,now 3.3.8-2ubuntu8 amd64 [installed,automatic]
libfftw3-dev/jammy,now 3.3.8-2ubuntu8 amd64 [installed]
libfftw3-double3/jammy,now 3.3.8-2ubuntu8 amd64 [installed,automatic]
libfftw3-long3/jammy,now 3.3.8-2ubuntu8 amd64 [installed,automatic]
libfftw3-quad3/jammy,now 3.3.8-2ubuntu8 amd64 [installed,automatic]
libfftw3-single3/jammy,now 3.3.8-2ubuntu8 amd64 [installed,automatic]

Окей, видимо у меня такая библиотека есть.

Окей, лезу на офф сайт, вижу традиционное:
./configure
make
make install


И вот тут я теряюсь. Что же тогда такое пакеты, что устанавливаются через apt install?
Мне казалось, что это и есть статические либы. Но, видимо, это не так?
И в чём тогда разница между либами, что собраны из исходников, и теми, что получены через apt install?
  • Вопрос задан
  • 169 просмотров
Решения вопроса 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Пакет - это набор файлов, распространяемых вместе. В пакете могут быть любые файлы, не обязательно библиотеки.
$ dpkg -L libfftw3-bin
/.
/usr
/usr/bin
/usr/bin/fftw-wisdom
/usr/bin/fftw-wisdom-to-conf
/usr/bin/fftwf-wisdom
/usr/bin/fftwl-wisdom
/usr/bin/fftwq-wisdom
/usr/share
/usr/share/doc
/usr/share/doc/libfftw3-bin
/usr/share/doc/libfftw3-bin/copyright
/usr/share/man
/usr/share/man/man1
/usr/share/man/man1/fftw-wisdom-to-conf.1.gz
/usr/share/man/man1/fftw-wisdom.1.gz
/usr/share/man/man1/fftwf-wisdom.1.gz
/usr/share/man/man1/fftwl-wisdom.1.gz
/usr/share/man/man1/fftwq-wisdom.1.gz
/usr/share/doc/libfftw3-bin/NEWS.gz
/usr/share/doc/libfftw3-bin/README
/usr/share/doc/libfftw3-bin/README.Debian
/usr/share/doc/libfftw3-bin/changelog.Debian.gz
Как видите, в пакете бинарники, доки и маны.
$ dpkg -L libfftw3-dev
/.
/usr
/usr/include
/usr/include/fftw3.f
/usr/include/fftw3.f03
/usr/include/fftw3.h
/usr/include/fftw3l.f03
/usr/include/fftw3q.f03
/usr/lib
/usr/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu/libfftw3.a
/usr/lib/x86_64-linux-gnu/libfftw3_omp.a
/usr/lib/x86_64-linux-gnu/libfftw3_threads.a
/usr/lib/x86_64-linux-gnu/libfftw3f.a
/usr/lib/x86_64-linux-gnu/libfftw3f_omp.a
/usr/lib/x86_64-linux-gnu/libfftw3f_threads.a
/usr/lib/x86_64-linux-gnu/libfftw3l.a
/usr/lib/x86_64-linux-gnu/libfftw3l_omp.a
/usr/lib/x86_64-linux-gnu/libfftw3l_threads.a
/usr/lib/x86_64-linux-gnu/libfftw3q.a
/usr/lib/x86_64-linux-gnu/libfftw3q_omp.a
/usr/lib/x86_64-linux-gnu/libfftw3q_threads.a
/usr/lib/x86_64-linux-gnu/pkgconfig
/usr/lib/x86_64-linux-gnu/pkgconfig/fftw3.pc
/usr/lib/x86_64-linux-gnu/pkgconfig/fftw3f.pc
/usr/lib/x86_64-linux-gnu/pkgconfig/fftw3l.pc
/usr/lib/x86_64-linux-gnu/pkgconfig/fftw3q.pc
/usr/share
/usr/share/doc
/usr/share/doc/libfftw3-dev
/usr/share/doc/libfftw3-dev/copyright
/usr/lib/x86_64-linux-gnu/libfftw3.so
/usr/lib/x86_64-linux-gnu/libfftw3_omp.so
/usr/lib/x86_64-linux-gnu/libfftw3_threads.so
/usr/lib/x86_64-linux-gnu/libfftw3f.so
/usr/lib/x86_64-linux-gnu/libfftw3f_omp.so
/usr/lib/x86_64-linux-gnu/libfftw3f_threads.so
/usr/lib/x86_64-linux-gnu/libfftw3l.so
/usr/lib/x86_64-linux-gnu/libfftw3l_omp.so
/usr/lib/x86_64-linux-gnu/libfftw3l_threads.so
/usr/lib/x86_64-linux-gnu/libfftw3q.so
/usr/lib/x86_64-linux-gnu/libfftw3q_omp.so
/usr/lib/x86_64-linux-gnu/libfftw3q_threads.so
/usr/share/doc/libfftw3-dev/NEWS.gz
/usr/share/doc/libfftw3-dev/README
/usr/share/doc/libfftw3-dev/README.Debian
/usr/share/doc/libfftw3-dev/changelog.Debian.gz
Опять же видим, что dev-пакет содержит файлы, необходимые разработчику - заголовки (.h), статические (.a) и разделяемые (.so) библиотеки.

Библиотека - это отдельный файл для статической линковки или разделяемый (.so).
Ответ написан
drygdryg
@drygdryg
Python-разработчик
Во-первых, пакет может содержать внутри себя библиотеку, исполняемый файл, либо и то, и другое. Также пакет может содержать в себе любые файлы (например, изображения с обоями для Рабочего стола). В принципе, пакет — это просто способ доставки чего-либо в систему (чаще всего программного обеспечения, конечно же, но не обязательно).
Во-вторых, если говорить о программах, то большинство дистрибутивов поставляют динамически скомпонованные исполняемые файлы в пакетах (Debian, Ubuntu, Arch Linux и др., за исключением самодостаточных пакетов), поэтому пакет, допустим, с прикладной программой может опираться на другие пакеты с библиотеками (в Debian такие пакеты обычно называются lib*).
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы