Рассмотрите возможность настройки переменной среды PKG_CONFIG_PATH, если вы установили программное обеспечение с нестандартным префиксом. Что это значит ?
Рассмотрите возможность настройки переменной среды PKG_CONFIG_PATH, если вы установили программное обеспечение с нестандартным префиксом. Что это значит ?
Ответы:
PKG_CONFIG_PATH
переменная окружения, которая указывает дополнительные пути, по которым pkg-config
будут выполняться поиск файлов .pc
Эта переменная используется для дополнения пути поиска по умолчанию в pkg-config. В типичной системе Unix, он будет искать в каталогах /usr/lib/pkgconfig
и /usr/share/pkgconfig
. Это обычно покрывает установленные модули системы. Однако некоторые локальные модули могут быть установлены с другим префиксом, например /usr/local
. В этом случае необходимо предварительно указать путь поиска, чтобы pkg-config могла найти файлы .pc.
pkg-config
Программа используется для получения информации об установленных библиотек в системе. Основное назначение pkg-config
- предоставить необходимую информацию для компиляции и связывания программы с библиотекой. Эти метаданные хранятся в файлах pkg-config. Эти файлы имеют суффикс .pc и находятся в определенных местах, известных инструменту pkg-config.
Чтобы проверить PKG_CONFIG_PATH
значение, используйте эту команду:
echo $PKG_CONFIG_PATH
Для установки PKG_CONFIG_PATH
значения используйте:
export PKG_CONFIG_PATH=/usr/lib/pkgconfig
или же
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
Первый ответ не является технически достаточно явным. На странице руководства (откройте терминал, введите man pkg-config
):
pkg-config
извлекает информацию о пакетах из специальных файлов метаданных. Эти файлы названы в честь пакета и имеют.pc
расширение. В большинстве систем,pkg-config
выглядит/usr/lib/pkgconfig
,/usr/share/pkgconfig
,/usr/local/lib/pkgconfig
и/usr/local/share/pkgconfig
для этих файлов. Кроме того, он будет выглядеть в списке каталогов, разделенных двоеточиями (в Windows, разделенных точкой с запятой), указанных вPKG_CONFIG_PATH
переменной среды.
Таким образом, pkg-config
программа не находится в PKG_CONFIG_PATH
каталоге; однако, если вы устанавливаете библиотеку, информация о том, чтобы использовать ее в automake
сценарии, была доступна, и она должна находиться в каталоге pkg-config
.
/usr/local/lib/x86_64-linux-gnu
автоматически добавляем в качестве места автоматического поиска (с пустым PKG_CONFIG_PATH
) и, действительно, множество .pc
файлов, в том числе GTK + et al. - жить есть. Причина этого заключается в одновременном включении доступности нескольких архитектур для пакета, как описано здесь: askubuntu.com/questions/449348/…
pkg-config
для поиска в вашей системе: askubuntu.com/a/373217/436580
Чтобы узнать, где pkg-config (версия 0.24 или новее) ищет установленные библиотеки по умолчанию, используйте следующую команду:
pkg-config --variable pc_path pkg-config
Чтобы изменить этот путь, установите PKG_CONFIG_PATH
переменную среды. Man-файл гласит PKG_CONFIG_PATH
:
Разделенный двоеточиями (в Windows, разделенный точкой с запятой) список каталогов для поиска файлов .pc. Каталог по умолчанию всегда будет искать после поиска пути; по умолчанию это libdir / pkgconfig: datadir / pkgconfig, где libdir - это libdir, где pkg-config и datadir - это каталог данных, где был установлен pkg-config.
echo $(pkg-config --variable pc_path pkg-config)${PKG_CONFIG_PATH:+:}${PKG_CONFIG_PATH}
PKG_CONFIG_PATH
и все еще иметь каталоги по умолчанию, плюс установка непустого значения не сбрасывает значения по умолчанию.
Вы пытаетесь создать часть программного обеспечения, скажем, Widget. Виджет опирается на другую библиотеку, libcog ради аргумента. Процесс сборки виджета (возможно, скрипт configure) использует pkg-config, чтобы определить, как использовать libcog. pkg-config ничего не знает о libcog.
Если libcog не установлен, это ваша проблема. Есть большая вероятность, что стандартная установка libcog решит проблему. В зависимости от вашей системы вам может потребоваться установить дополнительную версию пакета для разработчиков; он часто имеет «-devel» или «-dev» в конце, поэтому, если вы устанавливаете «libcog», вам также может понадобиться установить «libcog-devel».
Если libcog установлен, он, вероятно, установлен не так, чтобы pkg-config могла его найти. Вероятно, где-то в вашей системе есть файл libcog.pc. Ради аргумента, это в /opt/cog/lib/pkgconfig/libcog.pc. В этом случае вы можете сообщить об этом pkg-config, установив PKG_CONFIG_PATH в каталог, содержащий libcog.pc. Так что в оболочке Борна или аналогичной, что-то вроде
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/opt/cog/lib/pkgconfig/
Как только это будет сделано, мы надеемся, что повторный запуск команды, которая не удалась, сработает.
Если установлен libcog, включая библиотеки и заголовочные файлы, а у вас нет файла libcog.pc, дела идут плохо. Предположительно стандартная установка libcog включает в себя информацию, иначе Widget не будет полагаться на нее. Я бы сначала расследовал переустановку libcog. Можно вручную создать файл libcog.pc, но сделать его правильно сложно и очень специфично для данной библиотеки.
Я посмотрел на man-страницу моей 64-битной системы и немного запутался. В одной строке сказано:
pkg-config извлекает информацию о пакетах из специальных файлов метаданных. Эти файлы названы в честь пакета с расширением .pc. По умолчанию pkg-config ищет в этих файлах префикс директории / lib / pkgconfig; он также будет смотреть в списке каталогов, разделенных двоеточиями (в Windows, разделенных точкой с запятой), указанных переменной среды PKG_CONFIG_PATH.
Я предполагал, что это всегда выглядит в каталогах lib / pkgconfig. Оказывается это сами каталоги. В моем случае я пытался скомпилировать учебник Hello World GTK. Я нахожу файл, который я хочу, например
locate gtk | grep '\.pc'
Среди результатов:
/usr/lib/x86_64-linux-gnu/pkgconfig/gtk+-3.0.pc
Наконец-то должен был сделать экспорт.
export PKG_CONFIG_PATH=/usr/lib/x86_64-linux-gnu/pkgconfig/
man
страница упрощается для современных систем с множественной архитектурой. Я растерялась на некоторое время , потому что, на Debian 8 x86, pkg-config
уже ищет в папке x86_64 (без чего - либо в PKG_CONFIG_PATH
). Я не уверен, как это было включено, но командная строка для проверки этого, показанная @GrandAdmiral, указывает, что он контролируется тем, --variable pc_path
что установлено (каким-то образом!) Для pkg-config
собственного пакета.
Мне кажется, что большинство ответов содержат слишком много информации, чем необходимо.
Программное обеспечение, которое устанавливается, может (и обычно делает) полагаться на некоторые библиотеки и / или заголовки, и Система использует pkg-config для их поиска.
Сказал так, pkg-config
ищет эти файлы в предопределенных (по умолчанию) системных каталогов. Эти папки являются "префиксом". Например, /usr/local
ожидается, что библиотека с префиксом будет иметь заголовки /usr/local/include
, а сама библиотека будет /usr/local/lib
.
Однако pkg-config ищет библиотеки также в каталоге, указанном в переменной окружения PKG_CONFIG_PATH .
Затем, если вы устанавливаете программное обеспечение вне списка папок по умолчанию, вам нужно было «настроить» этот список, а именно добавить каталоги в PKG_CONFIG_PATH.
$ export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:<your-directory>
Для получения дополнительной информации вы можете посмотреть здесь и здесь
PKG_CONFIG_PATH
указывает дополнительные каталоги, в которых нужно искать только файлы yourPkg.pc
( pkg-config
спецификации). Это не влияет на такие специфичные для pkg вещи, как каталоги поиска в библиотеке.
Я пытался установить последнюю версию акселя, и я побежал, ./configure
и я получил это:
configure: error: Package requirements (openssl) were not met:
No package 'openssl' found
Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.
Alternatively, you may set the environment variables SSL_CFLAGS
and SSL_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.
Итак, я попробовал:
$ pkg-config --cflags 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
Как очевидно, я установил openssl ( sudo apt-get install openssl
) Но на вышеприведенном выводе, как вы можете видеть, говорится: «Пакет openssl не найден». Итак, чтобы убедиться, что я сделал:
find / -type f -name "*.pc" |& grep -iv permission | grep openssl
Оказывается, мне нужен какой-то другой пакет, так что немного погуглив, и я обнаружил, что должен был установить этот пакет:
sudo apt-get install libssl-dev
И все это не имело никакого отношения к изменению переменной env пути pkg-config.
Те, кто использует https://github.com/confluentinc/confluent-kafka-go
Пожалуйста, следуйте установке librdkafka
Теперь вы можете использовать go install / go run go build