Pensez à ajuster la variable d'environnement PKG_CONFIG_PATH si vous avez installé le logiciel avec un préfixe non standard. Qu'est-ce que ça veut dire ?
Pensez à ajuster la variable d'environnement PKG_CONFIG_PATH si vous avez installé le logiciel avec un préfixe non standard. Qu'est-ce que ça veut dire ?
Réponses:
PKG_CONFIG_PATH
est une variable d'environnement qui spécifie des chemins supplémentaires dans lesquels pkg-config
rechercheront ses fichiers .pc.
Cette variable est utilisée pour augmenter le chemin de recherche par défaut de pkg-config. Sur un système Unix typique, il effectuera une recherche dans les répertoires /usr/lib/pkgconfig
et /usr/share/pkgconfig
. Cela couvrira généralement les modules installés par le système. Cependant, certains modules locaux peuvent être installés avec un préfixe différent, tel que /usr/local
. Dans ce cas, il est nécessaire d’ajouter le chemin de recherche afin que pkg-config puisse localiser les fichiers .pc.
Le pkg-config
programme est utilisé pour récupérer des informations sur les bibliothèques installées sur le système. La principale utilisation de pkg-config
est de fournir les détails nécessaires à la compilation et à la liaison d'un programme à une bibliothèque. Ces métadonnées sont stockées dans des fichiers pkg-config. Ces fichiers ont le suffixe .pc et résident dans des emplacements spécifiques connus de l'outil pkg-config.
Pour vérifier la PKG_CONFIG_PATH
valeur, utilisez cette commande:
echo $PKG_CONFIG_PATH
Pour définir l' PKG_CONFIG_PATH
utilisation de la valeur:
export PKG_CONFIG_PATH=/usr/lib/pkgconfig
ou
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
La première réponse n'est pas assez explicite techniquement. Depuis la page de manuel (ouvrez un terminal, tapez man pkg-config
):
pkg-config
récupère des informations sur les paquets à partir de fichiers de métadonnées spéciaux. Ces fichiers portent le nom du paquet et ont une.pc
extension. Sur la plupart des systèmes,pkg-config
regarde dans/usr/lib/pkgconfig
,/usr/share/pkgconfig
,/usr/local/lib/pkgconfig
et/usr/local/share/pkgconfig
pour ces fichiers. Il examinera en outre la liste des répertoires spécifiés par laPKG_CONFIG_PATH
variable d'environnement , séparés par des points-virgules (sous Windows, séparés par des points-virgules) .
Donc, le pkg-config
programme n'est pas dans le PKG_CONFIG_PATH
répertoire; Toutefois, si vous installez une bibliothèque, les informations à utiliser dans un automake
script doivent être accessibles dans un répertoire pkg-config
.
/usr/local/lib/x86_64-linux-gnu
projetés comme un emplacement de recherche automatique gratuit (avec un vide PKG_CONFIG_PATH
), et en effet, de nombreux .pc
fichiers - notamment GTK + et al. - y vivre. La raison en est d'activer simultanément la disponibilité multi-architecture d'un paquet, comme indiqué ci-dessous: askubuntu.com/questions/449348/…
pkg-config
effectueront une recherche sur votre système: askubuntu.com/a/373217/436580
Pour savoir où pkg-config (version 0.24 ou ultérieure) recherche les bibliothèques installées par défaut, utilisez la commande suivante:
pkg-config --variable pc_path pkg-config
Pour modifier ce chemin, définissez la PKG_CONFIG_PATH
variable d'environnement. Le fichier man indique PKG_CONFIG_PATH
:
Liste de répertoires séparés par des points-virgules (sous Windows, séparés par des points-virgules) pour la recherche de fichiers .pc. Le répertoire par défaut sera toujours recherché après avoir recherché le chemin; La valeur par défaut est libdir / pkgconfig: datadir / pkgconfig où libdir est le libdir où pkg-config et datadir est le datadir où pkg-config a été installé.
echo $(pkg-config --variable pc_path pkg-config)${PKG_CONFIG_PATH:+:}${PKG_CONFIG_PATH}
PKG_CONFIG_PATH
répertoire vide et toujours des répertoires de recherche par défaut. De plus, définir une valeur non vide ne supprime pas les valeurs par défaut.
Vous essayez de construire un logiciel, disons Widget. Widget s'appuie sur une autre bibliothèque, libcog pour des raisons de discussion. Le processus de construction du widget (probablement un script de configuration) utilise pkg-config pour déterminer comment utiliser libcog. pkg-config ne sait rien de libcog.
Si libcog n'est pas installé, c'est votre problème. Il y a de fortes chances qu'une installation standard de libcog résolve le problème. Selon votre système, vous devrez peut-être installer une version "développeur" supplémentaire du paquet; il a souvent "-devel" ou "-dev" à la fin, donc si vous installez "libcog", vous devrez peut-être aussi installer "libcog-devel".
Si libcog est installé, pkg-config ne le trouvera probablement pas de manière à le trouver. Il existe probablement un fichier libcog.pc quelque part sur votre système. Par souci d'argumentation, voir /opt/cog/lib/pkgconfig/libcog.pc. Dans ce cas, vous pouvez en informer pkg-config en définissant PKG_CONFIG_PATH dans le répertoire contenant libcog.pc. Donc, dans un shell Bourne ou similaire, quelque chose comme
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/opt/cog/lib/pkgconfig/
Une fois que cela est fait, ré-exécuter la commande qui a échoué fonctionnera, espérons-le.
Si libcog est installé, y compris les bibliothèques et les fichiers d'en-tête, et que vous ne disposez pas d'un fichier libcog.pc, les choses vont mal. Vraisemblablement, une installation standard de libcog inclut les informations, sinon Widget ne s'en servirait pas. Je voudrais d’abord enquêter sur la réinstallation de libcog. Il est possible de créer manuellement le fichier libcog.pc, mais il est difficile de le définir correctement et il est très spécifique à une bibliothèque donnée.
J'ai consulté la page de manuel de mon système 64 bits et je me suis retrouvé un peu confus. Il a dit en une ligne:
pkg-config récupère des informations sur les paquets à partir de fichiers de métadonnées spéciaux. Ces fichiers sont nommés d'après le paquet, avec l'extension .pc. Par défaut, pkg-config recherche ces fichiers dans le préfixe du répertoire / lib / pkgconfig. il examinera également la liste des répertoires spécifiés par la variable d'environnement PKG_CONFIG_PATH séparés par des points-virgules (sous Windows, séparés par des points-virgules).
J'avais supposé que cela avait toujours été fait dans les répertoires lib / pkgconfig. Il s'avère que les répertoires eux-mêmes. Dans mon cas, j’essayais de compiler le tutoriel hello world gtk. Je localise le fichier que je veux par exemple
locate gtk | grep '\.pc'
Parmi les résultats sont:
/usr/lib/x86_64-linux-gnu/pkgconfig/gtk+-3.0.pc
Enfin était de faire une exportation.
export PKG_CONFIG_PATH=/usr/lib/x86_64-linux-gnu/pkgconfig/
man
page est trop simpliste pour les systèmes modernes multi-architecturaux. J'ai été un peu dérouté car, sous Debian 8 x86, pkg-config
le dossier x86_64 est déjà (sans rien dans PKG_CONFIG_PATH
). Je ne suis pas sûr de savoir comment cela a été intégré, mais la ligne de commande pour sonder ceci montrée par @GrandAdmiral indique qu'il est contrôlé par le package --variable pc_path
qui est défini (en quelque sorte!) Pour pkg-config
.
Il me semble que la plupart des réponses contiennent trop d'informations qu'il n'en faut.
Le logiciel que l’on installe peut (et fait généralement) s’appuyer sur certaines bibliothèques et / ou en-têtes et le système utilise pkg-config pour les trouver.
pkg-config
Cela dit, recherche ces fichiers dans des répertoires système prédéfinis (par défaut). Ces dossiers sont "préfixes". Par exemple, une bibliothèque avec un préfixe /usr/local
doit avoir des en-têtes /usr/local/include
et la bibliothèque elle-même sera dans /usr/local/lib
.
Cependant, pkg-config recherche également les bibliothèques dans le répertoire répertorié dans la variable d'environnement PKG_CONFIG_PATH .
Ensuite, si vous installez un logiciel en dehors de la liste de dossiers par défaut, vous devez "ajuster" la liste, à savoir ajouter vos répertoires dans PKG_CONFIG_PATH.
$ export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:<your-directory>
PKG_CONFIG_PATH
spécifie des répertoires supplémentaires dans lesquels rechercher uniquement des fichiers yourPkg.pc
(de pkg-config
spécification). Cela n'affecte pas les éléments spécifiques à pkg, tels que les répertoires de recherche de bibliothèque.
J'essayais d'installer la dernière version de axel et j'ai couru ./configure
et j'ai obtenu ceci:
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.
Alors j'ai essayé:
$ pkg-config --cflags openssl
et j'ai eu:
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
Il est évident que j’avais openssl installed ( sudo apt-get install openssl
), mais sur la sortie ci-dessus, vous pouvez voir qu’il est indiqué "Aucun paquet" openssl "trouvé". Donc pour être sûr de l'avoir fait:
find / -type f -name "*.pc" |& grep -iv permission | grep openssl
Il s'avère que j'ai besoin d'un autre paquet à coup sûr, alors un peu de recherche sur Google et j'ai découvert que je devais installer ce paquet:
sudo apt-get install libssl-dev
Et tout cela n’a rien à voir avec la modification de la variable env du chemin pkg-config.
Ceux qui utilisent https://github.com/confluentinc/confluent-kafka-go
Veuillez suivre les instructions d'installation de librdkafka
Maintenant, vous pouvez utiliser go install / go run go build