web-dev-qa-db-fra.com

Variable d'environnement PKG_CONFIG_PATH

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 ?

63
MKJ

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 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 programme pkg-config est utilisé pour récupérer des informations sur les bibliothèques installées sur le système. pkg-config est principalement utilisé pour 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 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
58
devav2

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 les informations sur les packages à partir de fichiers de métadonnées spéciaux. Ces fichiers portent le nom du paquet et portent l’extension .pc. Sur la plupart des systèmes, pkg-config recherche dans /usr/lib/pkgconfig, /usr/share/pkgconfig, /usr/local/lib/pkgconfig et /usr/local/share/pkgconfig pour ces fichiers. En outre, il recherchera dans la liste des répertoires séparés par des points-virgules (sous Windows, séparés par des points-virgules) spécifiés par la variable d'environnement PKG_CONFIG_PATH.

Donc, le programme pkg-config ne se trouve pas dans le répertoire PKG_CONFIG_PATH; Toutefois, si vous installez une bibliothèque, pour que les informations à utiliser dans un script automake soient accessibles, elles doivent se trouver dans un répertoire que pkg-config connaît.

39
Ian Martin

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 variable d'environnement PKG_CONFIG_PATH. 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é.

33
GrandAdmiral

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, allez à /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 Bourne Shell 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 n'avez pas de 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.

6
Alan De Smet

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.

Ainsi dit, pkg-config 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 qui a le préfixe /usr/local devrait avoir des en-têtes dans /usr/local/include et la bibliothèque elle-même sera 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 de dossiers par défaut, vous deviez "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 regarder ici et ici

5
clobrano

J'ai regardé la page de manuel de mon système 64 bits et je me suis un peu perdu. 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 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/
4
possumkeys

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 script pkg-config utilisé pour rechercher les fichiers de développement de ces bibliothèques génère ce message.

1
dobey

Ceux qui utilisent https://github.com/confluentinc/confluent- kafka-go

Suivez les instructions installées par librdkafka

  1. clone de git https://github.com/edenhill/librdkafka.git
  2. cd librdkafka
  3. ./configure --prefix/usr
  4. make
  5. Sudo fait installer

Maintenant, vous pouvez utiliser go install/go run go build

0
shotu

J'essayais d'installer la dernière version de axel et j'ai lancé ./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 installé (Sudo apt-get install openssl), mais sur la sortie ci-dessus, comme vous pouvez le voir, il est indiqué "Aucun paquet 'openssl' n'a été 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 trouvé 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.

0
Shayan