Variable d'environnement PKG_CONFIG_PATH


74

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 ?


1
Je voudrais presque demander cela de la même manière, sauf que vous auriez pu demander des exemples d'utilisation correcte de la variable d'environnement PKG_CONFIG_PATH telle que "qu'est-ce que c'est et comment je l'utilise?" Il semble que les réponses que vous avez eues essayaient de vous dire ceci. Je trouve cela beaucoup apparaître pendant ./configure quand il ne parvient pas à trouver des dépendances.
Douglas G. Allen

Réponses:


68

PKG_CONFIG_PATHest une variable d'environnement qui spécifie des chemins supplémentaires dans lesquels pkg-configrechercheront 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/pkgconfiget /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-configprogramme est utilisé pour récupérer des informations sur les bibliothèques installées sur le système. La principale utilisation de pkg-configest 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_PATHvaleur, utilisez cette commande:

echo $PKG_CONFIG_PATH

Pour définir l' PKG_CONFIG_PATHutilisation de la valeur:

export PKG_CONFIG_PATH=/usr/lib/pkgconfig

ou

export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig

@NathanKidd Merci pour le rappel, commentaire supprimé. L’erreur originale semble avoir été provoquée par une édition d’un auteur autre que l’original.
Timothy Gu

@remram, il semble que les erreurs soient corrigées maintenant, mais votre commentaire laisse les gens perplexes s'ils n'examinent pas attentivement l'historique des modifications. Pourriez-vous vérifier que vous êtes satisfait de la précision actuelle et peut-être supprimer le commentaire alors? (Et je supprimerai le mien.)
Nathan Kidd

@ devav2 les deux commandes d'exportation ne résolvent pas le problème
Shayan,

38

La première réponse n'est pas assez explicite techniquement. Depuis la page de manuel (ouvrez un terminal, tapez man pkg-config):

pkg-configré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 .pcextension. Sur la plupart des systèmes, pkg-config regarde dans /usr/lib/pkgconfig, /usr/share/pkgconfig, /usr/local/lib/pkgconfiget /usr/local/share/pkgconfigpour ces fichiers. Il examinera en outre la liste des répertoires spécifiés par la PKG_CONFIG_PATHvariable d'environnement , séparés par des points-virgules (sous Windows, séparés par des points-virgules) .

Donc, le pkg-configprogramme n'est pas dans le PKG_CONFIG_PATHrépertoire; Toutefois, si vous installez une bibliothèque, les informations à utiliser dans un automakescript doivent être accessibles dans un répertoire pkg-config.


La phrase clé semble être "sur la plupart des systèmes". Sur ma Debian, par exemple, nous sommes /usr/local/lib/x86_64-linux-gnuprojetés comme un emplacement de recherche automatique gratuit (avec un vide PKG_CONFIG_PATH), et en effet, de nombreux .pcfichiers - 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/…
underscore_d

(ne peut plus éditer) @GrandAdmiral dans une réponse plus bas, cette page a montré comment vérifier les chemins par défaut qui pkg-configeffectueront une recherche sur votre système: askubuntu.com/a/373217/436580
underscore_d

35

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_PATHvariable 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é.


3
un script utile seraecho $(pkg-config --variable pc_path pkg-config)${PKG_CONFIG_PATH:+:}${PKG_CONFIG_PATH}
albfan

5
C'est une excellente réponse qui m'a aidé. Cependant, pour clarifier, vous devriez dire "Ajouter à ce chemin", plutôt que "Modifier", car on peut avoir un PKG_CONFIG_PATHré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.
underscore_d

Cette réponse m'a été vraiment utile, merci! J'essayais de comprendre quel était le chemin de recherche par défaut de pkg-config puisque le mien est installé avec Linuxbrew. Les chemins par défaut n'existent donc pas. Merci!
mxplusb

6

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.


4
Une chose cependant - que se passe-t-il si PKG_CONFIG_PATH est défini - cela l’écrasera correctement?
NoBugs

1
@NoBugs good catch, j'ai modifié la réponse (plusieurs années plus tard!) Pour l'ajouter à la place.
Joe Malt

5

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/

1
+1 pour indiquer à quel point la manpage est trop simpliste pour les systèmes modernes multi-architecturaux. J'ai été un peu dérouté car, sous Debian 8 x86, pkg-configle 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_pathqui est défini (en quelque sorte!) Pour pkg-config.
underscore_d

5

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-configCela 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/localdoit avoir des en-têtes /usr/local/includeet 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>

Pour plus d'informations, vous pouvez regarder ici et ici


PKG_CONFIG_PATHspécifie des répertoires supplémentaires dans lesquels rechercher uniquement des fichiers yourPkg.pc(de pkg-configspécification). Cela n'affecte pas les éléments spécifiques à pkg, tels que les répertoires de recherche de bibliothèque.
underscore_d

1

Cela signifie que vous essayez de construire quelque chose à partir des sources et qu'il ne trouve pas toutes les dépendances dont il a besoin. Le pkg-configscript utilisé pour rechercher les fichiers de développement de ces bibliothèques génère ce message.


0

J'essayais d'installer la dernière version de axel et j'ai couru ./configureet 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.


En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.