Considere ajustar la variable de entorno PKG_CONFIG_PATH si instaló software en un prefijo no estándar. Qué significa esto ?
Considere ajustar la variable de entorno PKG_CONFIG_PATH si instaló software en un prefijo no estándar. Qué significa esto ?
Respuestas:
PKG_CONFIG_PATH
es una variable de entorno que especifica rutas adicionales en las que pkg-config
buscará sus archivos .pc.
Esta variable se utiliza para aumentar la ruta de búsqueda predeterminada de pkg-config. En un sistema Unix típico, buscará en los directorios /usr/lib/pkgconfig
y /usr/share/pkgconfig
. Esto generalmente cubrirá los módulos instalados en el sistema. Sin embargo, algunos módulos locales pueden instalarse en un prefijo diferente como /usr/local
. En ese caso, es necesario anteponer la ruta de búsqueda para que pkg-config pueda localizar los archivos .pc.
El pkg-config
programa se utiliza para recuperar información sobre bibliotecas instaladas en el sistema. El uso principal de pkg-config
es proporcionar los detalles necesarios para compilar y vincular un programa a una biblioteca. Estos metadatos se almacenan en archivos pkg-config. Estos archivos tienen el sufijo .pc y residen en ubicaciones específicas conocidas por la herramienta pkg-config.
Para verificar el PKG_CONFIG_PATH
valor use este comando:
echo $PKG_CONFIG_PATH
Para establecer el PKG_CONFIG_PATH
valor use:
export PKG_CONFIG_PATH=/usr/lib/pkgconfig
o
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
La primera respuesta no es técnicamente lo suficientemente explícita. Desde la página del manual (abra una terminal, escriba man pkg-config
):
pkg-config
recupera información sobre paquetes de archivos especiales de metadatos. Estos archivos llevan el nombre del paquete y tienen una.pc
extensión. En la mayoría de los sistemas,pkg-config
se ve en/usr/lib/pkgconfig
,/usr/share/pkgconfig
,/usr/local/lib/pkgconfig
y/usr/local/share/pkgconfig
para estos archivos. Además, buscará en la lista de directorios separados por dos puntos (en Windows, separados por punto y coma) especificados por laPKG_CONFIG_PATH
variable de entorno.
Entonces el pkg-config
programa no está en el PKG_CONFIG_PATH
directorio; sin embargo, si instala una biblioteca, para que la información para usarla en un automake
script sea accesible, debe estar en un directorio que pkg-config
tenga en cuenta.
/usr/local/lib/x86_64-linux-gnu
lanzan como una ubicación de búsqueda automática de forma gratuita (con un vacío PKG_CONFIG_PATH
) y, de hecho, muchos .pc
archivos, notables, incluidos GTK + et al. - vivir allí. La razón de esto es permitir la disponibilidad de múltiples arquitecturas de un paquete simultáneamente, como se describe aquí: askubuntu.com/questions/449348/…
pkg-config
buscarán en su sistema: askubuntu.com/a/373217/436580
Para ver dónde pkg-config (versión 0.24 o posterior) busca las bibliotecas instaladas de forma predeterminada, use el siguiente comando:
pkg-config --variable pc_path pkg-config
Para modificar esa ruta, establezca la PKG_CONFIG_PATH
variable de entorno. El archivo man indica PKG_CONFIG_PATH
:
Una lista de directorios separados por dos puntos (en Windows, separados por punto y coma) para buscar archivos .pc. El directorio predeterminado siempre se buscará después de buscar la ruta; el valor predeterminado es libdir / pkgconfig: datadir / pkgconfig donde libdir es el libdir donde pkg-config y datadir es el datadir donde se instaló pkg-config.
echo $(pkg-config --variable pc_path pkg-config)${PKG_CONFIG_PATH:+:}${PKG_CONFIG_PATH}
PKG_CONFIG_PATH
y aún tener directorios de búsqueda predeterminados, además de establecer un valor no en blanco no borra los valores predeterminados.
Estás tratando de construir una pieza de software, digamos Widget. Widget se basa en otra biblioteca, libcog en aras de la discusión. El proceso de compilación del widget (probablemente un script de configuración) está usando pkg-config para determinar cómo usar libcog. pkg-config no sabe nada sobre libcog.
Si libcog no está instalado, ese es tu problema. Existe una buena posibilidad de que una instalación estándar de libcog solucione el problema. Dependiendo de su sistema, es posible que necesite instalar una versión adicional de "desarrollador" del paquete; a menudo tiene "-devel" o "-dev" al final, por lo que si instala "libcog", es posible que también necesite instalar "libcog-devel".
Si libcog está instalado, probablemente no esté instalado de manera que pkg-config pueda encontrarlo. Probablemente haya un archivo libcog.pc en algún lugar de su sistema. En aras de la discusión, está en /opt/cog/lib/pkgconfig/libcog.pc. En ese caso, puede informarle a pkg-config al configurar PKG_CONFIG_PATH en el directorio que contiene libcog.pc. Entonces, en un shell Bourne o similar, algo así como
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/opt/cog/lib/pkgconfig/
Una vez hecho esto, volver a ejecutar el comando que falló con suerte funcionará.
Si está instalado libcog, incluidas las bibliotecas y los archivos de encabezado, y no tiene un archivo libcog.pc, las cosas van mal. Presumiblemente, una instalación estándar de libcog incluye la información, de lo contrario, Widget no confiaría en ella. Primero investigaría reinstalar libcog. Es posible crear manualmente el archivo libcog.pc, pero hacerlo bien es difícil y altamente específico para una biblioteca determinada.
Miré la página de manual de mi sistema de 64 bits y me confundí un poco. Decía en una línea:
pkg-config recupera información sobre paquetes de archivos especiales de metadatos. Estos archivos llevan el nombre del paquete, con la extensión .pc. Por defecto, pkg-config busca en el prefijo de directorio / lib / pkgconfig estos archivos; también buscará en la lista de directorios separados por dos puntos (en Windows, separados por punto y coma) especificados por la variable de entorno PKG_CONFIG_PATH.
Supuse que siempre se ve en los directorios lib / pkgconfig. Resulta que son los directorios mismos. En mi caso, estaba tratando de compilar el tutorial hello world gtk. Localizo el archivo que quiero, por ejemplo
locate gtk | grep '\.pc'
Entre los resultados están:
/usr/lib/x86_64-linux-gnu/pkgconfig/gtk+-3.0.pc
Finalmente fue para hacer una exportación.
export PKG_CONFIG_PATH=/usr/lib/x86_64-linux-gnu/pkgconfig/
man
página se simplifica demasiado para los sistemas modernos con capacidad de arquitectura múltiple. Estuve confundido por un tiempo porque, en Debian 8 x86, pkg-config
ya se ve en la carpeta x86_64 (sin nada PKG_CONFIG_PATH
). No estoy seguro de cómo se incorporó esto, pero la línea de comando para probar esto que muestra @GrandAdmiral indica que está controlado por el --variable pc_path
que está configurado (¡de alguna manera!) Para pkg-config
el propio paquete.
Me parece que la mayoría de las respuestas tienen demasiada información de la necesaria.
El software que se instala puede (y generalmente lo hace) depender de algunas bibliotecas y / o encabezados y el Sistema usa pkg-config para encontrarlos.
Dicho esto, pkg-config
busca estos archivos en los directorios del sistema predefinidos (predeterminados). Esas carpetas son "prefijo". Por ejemplo, /usr/local
se espera que una biblioteca que tenga prefijo tenga encabezados /usr/local/include
, y la biblioteca en sí estará /usr/local/lib
.
Sin embargo, pkg-config busca bibliotecas también en el directorio listado en la variable de entorno PKG_CONFIG_PATH .
Luego, si instala software fuera de la lista predeterminada de carpetas, debe "ajustar" la lista, es decir, agregar sus directorios a PKG_CONFIG_PATH
$ export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:<your-directory>
PKG_CONFIG_PATH
especifica directorios adicionales en los que buscar solo archivos yourPkg.pc
( pkg-config
especificación). No afecta a cosas específicas de pkg como directorios de búsqueda de biblioteca.
Estaba tratando de instalar la última versión de axel y corrí ./configure
y obtuve esto:
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.
Entonces intenté:
$ pkg-config --cflags openssl
y obtuve:
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
Como es obvio, tenía openssl instalado ( sudo apt-get install openssl
) Pero en el resultado anterior, como puede ver, dice "No se encontró el paquete 'openssl'". Entonces, para asegurarme de que lo hice:
find / -type f -name "*.pc" |& grep -iv permission | grep openssl
Resulta que necesito otro paquete seguro, así que busqué un poco en Google y descubrí que tenía que instalar este paquete:
sudo apt-get install libssl-dev
Y todo esto no tuvo nada que ver con el cambio de la variable env de la ruta pkg-config.
Aquellos que usan https://github.com/confluentinc/confluent-kafka-go
Siga la instalación de librdkafka
Ahora puedes usar go install / go run go build