Подумайте про коригування змінної середовища 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. Ці файли мають суфікс .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 + та ін. - жити там. Причина цього полягає в тому, щоб одночасно включити доступність пакету для багатьох архітектур, як зазначено тут: 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 - це datadir, де встановлено pkg-config.
echo $(pkg-config --variable pc_path pkg-config)${PKG_CONFIG_PATH:+:}${PKG_CONFIG_PATH}
PKG_CONFIG_PATH
та все ще мати каталоги, що шукаються за замовчуванням, плюс встановлення непорожнього значення не знімає значення за замовчуванням.
Ви намагаєтеся скласти частину програмного забезпечення, скажімо віджет. За допомогою аргументу віджет покладається на іншу бібліотеку, libcog. Процес збирання віджетів (можливо, сценарій налаштування) використовує 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 включає інформацію, інакше віджет не покладається на неї. Я б спершу дослідив перевстановлення 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 речі, такі як каталоги пошуку в бібліотеці.
Я намагався встановити останню версію axel, і я побіг, ./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
І все це не мало нічого спільного зі зміною змінної pkg-config path env.
Ті, хто використовує https://github.com/confluentinc/confluent-kafka-go
Будь ласка, дотримуйтесь встановлення librdkafka
Тепер ви можете використовувати go install / go run go build