Почему pkg-config находит пакет openssl, хотя находить его не должна?

Для новичков как вообще в Linux, так и в конкретной теме, к которой относится вопрос.

Модератор: Bizdelnick

Ответить
Аватара пользователя
жучара
Сообщения: 950
ОС: астралинукс

Почему pkg-config находит пакет openssl, хотя находить его не должна?

Сообщение жучара »

Друзья! Чтобы всех запутать, придумали pkg-config
man pkg-config
...
The pkg-config program is used to retrieve information about installed libraries in the system.
...
Ну хорошо, натравим pkg-config на пакет openssl (последний стоит):

Shell

$ dpkg -l | grep 'ii openssl'
ii openssl 1.1.1d-2astra2 amd64 Secure Sockets Layer toolkit - cryptographic utility
$

Shell

$ pkg-config --exists --print-errors "openssl"
$
Чудненько. А если бы pkg-config не нашёл openssl,было бы что-то вроде:

Shell

$ pkg-config --exists --print-errors "openssl"
Package openssl was not found in the pkg-config search path.
Perhaps you should add the directory containing `openssl.pc'
to the PKG_CONFIG_PATH environment variable
No package 'openssl' found
$
Казалось бы. Живи да радуйся. Но

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Ещё раз ман:
man pkg-config
...
pkg-config retrieves information about packages from special metadata files. These files are named after the package, and has a .pc extension. On most systems, pkg-config looks in /usr/lib/pkgconfig, /usr/share/pkgconfig, /usr/local/lib/pkgconfig and /usr/local/share/pkgconfig for these files. It will additionally look in the colon-separated (on Windows, semicolon-separated) list of directories specified by the PKG_CONFIG_PATH environment variable.
То есть команада pkg-config --exists --print-errors "openssl" должна была найти файл openssl.pc в одной из директорий

/usr/lib/pkgconfig
/usr/share/pkgconfig
/usr/local/lib/pkgconfig
/usr/local/share/pkgconfig


Либо в другой директории, указанной в переменной PKG_CONFIG_PATH. Смотрим.

Shell

$ ls /usr/lib/pkgconfig/openssl.pc
ls: невозможно получить доступ к '/usr/lib/pkgconfig/openssl.pc': Нет такого файла или каталога
$
$ ls /usr/share/pkgconfig/openssl.pc
ls: невозможно получить доступ к '/usr/share/pkgconfig/openssl.pc': Нет такого файла или каталога
$
$ ls /usr/local/lib/pkgconfig/openssl.pc
ls: невозможно получить доступ к '/usr/local/lib/pkgconfig/openssl.pc': Нет такого файла или каталога
$
$ ls /usr/local/share/pkgconfig/openssl.pc
ls: невозможно получить доступ к '/usr/local/share/pkgconfig/openssl.pc': Нет такого файла или каталога
$
$ echo $PKG_CONFIG_PATH

$
Занавес. openssl.pc нигде нет, но pkg-config ошибку не выдаёт. Ось не покоцанная, все пакеты установлены только с родных репозиториев или собраны руками. Астралинукс Орёл 2.12.29 Спасибо, кто откликнется.
Я просто читаю маны.
Спасибо сказали:
Аватара пользователя
Hephaestus
Сообщения: 3729
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2
Контактная информация:

Re: Почему pkg-config находит пакет openssl, хотя находить его не должна?

Сообщение Hephaestus »

жучара писал(а):
08.06.2020 15:04
Чтобы всех запутать, придумали pkg-config
Бедный... Опять Вас обманули.

Во-первых, с чего Вы взяли, что pkg-config --exists чего-то там находит.
Когда pkg-config запускается с ключом --exists, нужно проверять код завершения. Вы его проверяли?

Во-вторых, посмотрите, что вернет
pkg-config --libs openssl
тогда уж точно будет видно, нашлось что-нибудь или нет.

В-третьих, файл openssl.pc может находиться и в других каталогах.
Посмотрите состав пакета.
Что-нибудь вроде
/lib/openssl-1.0/lib/pkgconfig/openssl.pc
или пройдитесь поиском по каталогам.

P.S. У Вас пытливый ум, Вы порой ставите глубокие вопросы.
Вам бы учиться надо. Столько усилий впустую пропадает.
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:
Аватара пользователя
жучара
Сообщения: 950
ОС: астралинукс

Re: Почему pkg-config находит пакет openssl, хотя находить его не должна?

Сообщение жучара »

Hephaestus писал:
08.06.2020 15:52
жучара писал(а):
08.06.2020 15:04
Чтобы всех запутать, придумали pkg-config
Бедный... Опять Вас обманули.
Во-первых, с чего Вы взяли, что pkg-config --exists чего-то там находит.
косвенно если- pkg-config --exists --print-errors <имя пакета> выполняется из многих файлов ./configure. Она же не просто так там, как вы думаете?
Hephaestus писал:
08.06.2020 15:52
Когда pkg-config запускается с ключом --exists, нужно проверять код завершения. Вы его проверяли?
теперь проверил

Shell

$ pkg-config --exists --print-errors openssl
$ echo $?
0
$
$ pkg-config --exists openssl
$ echo $?
0
$
Hephaestus писал:
08.06.2020 15:52
Во-вторых, посмотрите, что вернет
pkg-config --libs openssl
тогда уж точно будет видно, нашлось что-нибудь или нет.

Shell

$ pkg-config --libs openssl
-lssl -lcrypto
$
Hephaestus писал:
08.06.2020 15:52
В-третьих, файл openssl.pc может находиться и в других каталогах.
Посмотрите состав пакета.
Что-нибудь вроде
/lib/openssl-1.0/lib/pkgconfig/openssl.pc
или пройдитесь поиском по каталогам.
файл openssl.pc может находиться где угодно, но ДОЛЖЕН согласно man-y и удачному заверешению программы находиться только в каталогах

Shell

/usr/lib/pkgconfig
/usr/share/pkgconfig
/usr/local/lib/pkgconfig
/usr/local/share/pkgconfig
Либо в другой директории, указанной в переменной

Shell

PKG_CONFIG_PATH
. Если мы сейчас найдём ГДЕ-НИБУДЬ openssl.pc и будем довольствоваться тем объяснением, что вот мол openssl.pc где-то есть и pkg-config потому его находит, это будет неправильно.

Впрочем, я давным-давно его уже нашёл, просто сюда не написал, боясь направить всех по ложному следу.

Shell

$ sudo find / -name openssl.pc -type f
find: ‘/run/user/1000/doc’: Отказано в доступе
/usr/lib/x86_64-linux-gnu/pkgconfig/openssl.pc
$
Ну... то есть где-то в системе он есть, да. Но должен-то он быть не где-то, а... Впрочем, я повторяюсь уже.

И да, /usr/lib/x86_64-linux-gnu/pkgconfig/openssl.pc это тот самый openssl.pc, который ищется и который находится и благодаря ему pkg-config отрабатывает без ошибок, что неправильно.
Я просто читаю маны.
Спасибо сказали:
IMB
Сообщения: 2561
ОС: Debian

Re: Почему pkg-config находит пакет openssl, хотя находить его не должна?

Сообщение IMB »

Всё правильно, у Вас 64-битная система, соотвественно её либы находятся в этой директории, это сделано для того что бы была возможность параллельно поставить 32-битные либы.
Спасибо сказали:
Аватара пользователя
жучара
Сообщения: 950
ОС: астралинукс

Re: Почему pkg-config находит пакет openssl, хотя находить его не должна?

Сообщение жучара »

IMB писал(а):
08.06.2020 17:39
Всё правильно, у Вас 64-битная система, соотвественно её либы находятся в этой директории, это сделано для того что бы была возможность параллельно поставить 32-битные либы.
так это должно быть где-то прописано, в мане например, да? Но там не прописано.
Я просто читаю маны.
Спасибо сказали:
Аватара пользователя
Hephaestus
Сообщения: 3729
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2
Контактная информация:

Re: Почему pkg-config находит пакет openssl, хотя находить его не должна?

Сообщение Hephaestus »

жучара писал(а):
08.06.2020 17:43
так это должно быть где-то прописано, в мане например, да?
Во-первых, man-страница - это не единственный источник информации.
И не самый подробный. Есть ещё страницы info и всякая документация на оф. сайтах.
Правда, в случае pkg-config страница info показывает содержимое man-страницы, так что здесь не тот случай.

А во-вторых (и это главное), man-страница - это что? Это часть проекта.
И взята из апстрима вместе с остальными исходниками (входит в состав тарбола, проще говоря).
А из исходников можно собрать как 32-битную, так и 64-битную версию - исходники одни и те же.
И man-страница одна и та же. И разработчик не знает, какую сборку сотворят в том или ином дистре.
Поэтому в man-странице указаны пути, скажем так, в общем виде.
Никаких поправок на разрядность или особенности конкретного дистра там нет и быть не должно.
Эти поправки - забота дистростроителей. Которые должны были либо внести изменения в man-страницу конкретной программы, либо указать в документации к дистру, где в нашем дистре принято размещать библиотеки, конфиги и пр.
И это крайне желательно, потому что в одном дистре будет
/usr/lib - для 32-битных файлов
и /usr/lib64 - для 64-битных,
а в другом вполне может быть
/usr/lib - для 64-битных файлов
и /usr/lib32 - для 32-битных,
а в третьем
/usr/lib64 - для 64-битных файлов
и /usr/lib32 - для 32-битных.
И это полностью на усмотрение дистростроителей.

Но это в любом случае не проблема man-страницы от разработчика конкретной программы.
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20793
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Почему pkg-config находит пакет openssl, хотя находить его не должна?

Сообщение Bizdelnick »

жучара писал(а):
08.06.2020 17:43
так это должно быть где-то прописано, в мане например, да? Но там не прописано.
Там прописано
жучара писал(а):
08.06.2020 15:04
On most systems, pkg-config looks in …
Что как бы намекает, что на некоторых системах пути могут быть другие. Всё для того, чтобы Вас (не всех, а лично Вас, к чему скромничать!) запутать. Для этой же цели, видимо, потом привели пример команды, показывающей реальные пути поиска: pkg-config --variable pc_path pkg-config
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
жучара
Сообщения: 950
ОС: астралинукс

Re: Почему pkg-config находит пакет openssl, хотя находить его не должна?

Сообщение жучара »

Bizdelnick писал:
08.06.2020 19:04
Что как бы намекает, что на некоторых системах пути могут быть другие. Всё для того, чтобы Вас (не всех, а лично Вас, к чему скромничать!) запутать. Для этой же цели, видимо, потом привели пример команды, показывающей реальные пути поиска: pkg-config --variable pc_path pkg-config
Именно что оно не говорит прямо, а намекает, да не просто, а как бы. Итак, на большинстве систем файлы *.pc там-то и там -то. На меньшинстве- в путях, которые в переменной PKG_CONFIG_PATH. Вот кому придёт в голову, что этой инфы по поиску путей недостаточно и кто ещё будет искать другие пути? Давай весь интернет перероем вдруг им в голову ещё что взбредёт.

По --variable. Пример есть, да, а команда?

--variable=VARIABLENAME я её и не искал, честно говоря, ибо переменная PKG_CONFIG_PATH решает (наивный я). А и нашёл бы- внимания не обратил потому, что она не возвращает, а устанавливает. (хотя по виду- устанавливает, по описанию- возвращает)

Ни разу не запутано ничё. А так спасибо, конечно.
Я просто читаю маны.
Спасибо сказали:
Аватара пользователя
Hephaestus
Сообщения: 3729
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2
Контактная информация:

Re: Почему pkg-config находит пакет openssl, хотя находить его не должна?

Сообщение Hephaestus »

жучара писал(а):
08.06.2020 20:33
Вот кому придёт в голову, что этой инфы по поиску путей недостаточно и кто ещё будет искать другие пути?
Любой, кто опробовал на практике хотя бы пару дистров, построенных по разным принципам, кто собирал пакеты из исходников, кто слышал про multilibs и сталкивался с ошибками при сборке. Опытный линуксоид, одним словом. Неопытный, конечно, утонет в этих различиях.
Но я уже сказал выше: ориентируйтесь на свой дистр. Если я не знаю, как устроен мой дистр, где в моём дистре принято размещать либы, конфиги и прочее, я ж вообще ни черта не найду, будь у меня хоть десяток man-страниц.
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:
Ответить