Variable d'environnement PKG_CONFIG_PATH

54

Envisagez d'ajuster la variable d'environnement PKG_CONFIG_PATH si vous logiciel installé dans un préfixe non standard. Qu'est-ce que cela signifie?

    
posée MKJ 31.10.2012 - 20:00
la source

8 réponses

46

PKG_CONFIG_PATH est une variable d'environnement qui spécifie des chemins supplémentaires dans lesquels pkg-config recherchera 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 classique, il recherche dans les répertoires /usr/lib/pkgconfig et /usr/share/pkgconfig . Cela couvrira généralement les modules installés sur le système. Cependant, certains modules locaux peuvent être installés dans un préfixe différent tel que /usr/local . Dans ce cas, il est nécessaire d'ajouter le chemin de recherche pour que pkg-config puisse localiser les fichiers .pc.

Le programme pkg-config est utilisé pour récupérer des informations sur les programmes installés. bibliothèques du système. L'utilisation principale de pkg-config consiste à 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 les 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 valeur PKG_CONFIG_PATH , utilisez cette commande:

echo $PKG_CONFIG_PATH

Pour définir la valeur PKG_CONFIG_PATH , utilisez:

export PKG_CONFIG_PATH=/usr/lib/pkgconfig

ou

export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
    
réponse donnée devav2 31.10.2012 - 20:59
la source
33

La première réponse n’est pas suffisamment explicite sur le plan technique. A partir de la page de manuel (ouvrez un terminal, tapez man pkg-config ):

  
    

pkg-config récupère les informations sur les packages à partir de fichiers de métadonnées spéciaux.      Ces fichiers portent le nom du package et ont une extension .pc . Sur la plupart      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      va également regarder dans les deux-points séparés (sous Windows, les points-virgules séparés)      liste des répertoires spécifiés par la variable d'environnement PKG_CONFIG_PATH .

  

Le programme pkg-config n'est donc pas dans le répertoire PKG_CONFIG_PATH ; Cependant, si vous installez une bibliothèque, pour que les informations qui s'y rapportent soient accessibles dans un script automake , elles doivent se trouver dans un répertoire que pkg-config connaît.

    
réponse donnée Ian Martin 31.07.2013 - 08:03
la source
29

Pour voir 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 variable d'environnement PKG_CONFIG_PATH . Le fichier man indique que PKG_CONFIG_PATH est:

  

Une liste de   répertoires pour rechercher des fichiers .pc. Le répertoire par défaut sera toujours   être recherché après la recherche du 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é.

    
réponse donnée GrandAdmiral 08.11.2013 - 22:24
la source
6

Vous essayez de créer un logiciel, disons Widget. Widget s'appuie sur une autre bibliothèque, libcog, pour des raisons d'argumentation. Le processus de construction de Widget (probablement un script configure) utilise pkg-config pour déterminer comment utiliser libcog. pkg-config ne sait rien sur 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épare le problème. Selon votre système, vous devrez peut-être installer une version "développeur" supplémentaire du package; 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é, il n'est probablement pas installé de manière à ce que pkg-config puisse le trouver. Il y a probablement un fichier libcog.pc quelque part sur votre système. Par souci d’argument, il s’agit de /opt/cog/lib/pkgconfig/libcog.pc. Dans ce cas, vous pouvez en parler à pkg-config en définissant PKG_CONFIG_PATH sur le répertoire contenant libcog.pc. Donc, dans un shell Bourne ou similaire, quelque chose comme

export PKG_CONFIG_PATH=/opt/cog/lib/pkgconfig/

Une fois cela fait, il est à espérer que la ré-exécution de la commande qui a échoué fonctionnera.

Si libcog est installé, y compris les bibliothèques et les fichiers d'en-tête, et que vous n'avez pas de fichier libcog.pc, les choses vont mal. Vraisemblablement, une installation standard de libcog inclut les informations, sinon le widget ne comptera pas sur lui. J'ai d'abord étudié la réinstallation de libcog. Il est possible de créer manuellement le fichier libcog.pc, mais le faire correctement est difficile et très spécifique à une bibliothèque donnée.

    
réponse donnée Alan De Smet 01.05.2014 - 18:44
la source
4

J'ai regardé la page de manuel de mon système 64 bits et je suis un peu confus. Il a dit dans une ligne:

  

pkg-config récupère des informations sur les paquets de special          fichiers de métadonnées. Ces fichiers portent le nom du package, avec          l'extension .pc. Par défaut, pkg-config se place dans le répertoire          tory préfixe / lib / pkgconfig pour ces fichiers; il va aussi regarder dans          la liste séparée par des deux-points (sous Windows, séparée par des points-virgules) de          répertoires spécifiés par la variable d'environnement PKG_CONFIG_PATH          capable.

J'avais supposé que cela se passait toujours dans les répertoires lib / pkgconfig. Désigne ses répertoires eux-mêmes. Dans mon cas, j'essayais de compiler le tutoriel hello world gtk. Je trouve 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

Finalement c'était pour faire une exportation.

export PKG_CONFIG_PATH=/usr/lib/x86_64-linux-gnu/pkgconfig/
    
réponse donnée possumkeys 01.01.2015 - 09:13
la source
4

Il me semble que la plupart des réponses contiennent trop d’informations.

Le logiciel que l’on installe peut (et le 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.

Dit donc, pkg-config recherche ces fichiers dans les répertoires prédéfinis (par défaut) du système. Ces dossiers sont "préfixes". Par exemple. une bibliothèque qui a le préfixe /usr/local devrait avoir des en-têtes dans /usr/local/include et la bibliothèque elle-même dans /usr/local/lib . pkg-config recherche toutefois les bibliothèques également 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 par défaut des dossiers, vous devez "ajuster" la liste, à savoir ajouter vos répertoires à PKG_CONFIG_PATH

$ export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:<your-directory>

Pour plus d’informations, vous pouvez consulter ici et ici

    
réponse donnée clobrano 31.03.2015 - 09:45
la source
1

Cela signifie que vous essayez de créer quelque chose à partir des sources, et qu'il ne trouve pas toutes les dépendances dont il a besoin. Le script pkg-config qu'il utilise pour trouver les fichiers de développement pour ces bibliothèques génère ce message.

    
réponse donnée dobey 31.10.2012 - 20:53
la source
0

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

J'ai donc 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

Evidemment, openssl a été installé ( sudo apt-get install openssl ) Mais sur la sortie ci-dessus, comme vous pouvez le voir, il indique "No package" openssl "found". Donc, pour être sûr d'avoir fait:

find / -type f -name "*.pc" |& grep -iv permission | grep openssl

Il est certain que j'ai besoin d'un autre paquet, donc un peu googler et j'ai trouvé que je devais installer ce paquet:

sudo apt-get install libssl-dev

Et tout ceci n’a rien à voir avec la modification de la variable env du chemin pkg-config.

    
réponse donnée Shayan 28.02.2018 - 15:08
la source

Lire d'autres questions sur les étiquettes