Valuta di modificare la variabile d'ambiente PKG_CONFIG_PATH se hai installato il software in un prefisso non standard. Cosa significa questo ?
Valuta di modificare la variabile d'ambiente PKG_CONFIG_PATH se hai installato il software in un prefisso non standard. Cosa significa questo ?
Risposte:
PKG_CONFIG_PATH
è una variabile di ambiente che specifica percorsi aggiuntivi in cui pkg-config
cercare i suoi file .pc.
Questa variabile viene utilizzata per aumentare il percorso di ricerca predefinito di pkg-config. Su un tipico sistema Unix, cercherà nelle directory /usr/lib/pkgconfig
e /usr/share/pkgconfig
. Questo di solito coprirà i moduli installati dal sistema. Tuttavia, alcuni moduli locali possono essere installati in un prefisso diverso come /usr/local
. In tal caso, è necessario anteporre il percorso di ricerca in modo che pkg-config possa individuare i file .pc.
Il pkg-config
programma viene utilizzato per recuperare informazioni sulle librerie installate nel sistema. L'uso primario di pkg-config
è fornire i dettagli necessari per la compilazione e il collegamento di un programma a una libreria. Questi metadati sono archiviati in file pkg-config. Questi file hanno il suffisso .pc e risiedono in posizioni specifiche note allo strumento pkg-config.
Per verificare il PKG_CONFIG_PATH
valore utilizzare questo comando:
echo $PKG_CONFIG_PATH
Per impostare il PKG_CONFIG_PATH
valore utilizzare:
export PKG_CONFIG_PATH=/usr/lib/pkgconfig
o
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
La prima risposta non è tecnicamente abbastanza esplicita. Dalla pagina man (aprire un terminale, digitare man pkg-config
):
pkg-config
recupera informazioni sui pacchetti da file di metadati speciali. Questi file prendono il nome dal pacchetto e hanno.pc
un'estensione. Sulla maggior parte dei sistemi,pkg-config
guarda in/usr/lib/pkgconfig
,/usr/share/pkgconfig
,/usr/local/lib/pkgconfig
e/usr/local/share/pkgconfig
per questi file. Verrà inoltre visualizzato nell'elenco di directory separato da due punti (su Windows, separato da punto e virgola) specificato dallaPKG_CONFIG_PATH
variabile di ambiente.
Quindi il pkg-config
programma non è nella PKG_CONFIG_PATH
directory; tuttavia, se si installa una libreria, affinché le informazioni per utilizzarlo in uno automake
script siano accessibili, è necessario che siano presenti in una directory pkg-config
.
/usr/local/lib/x86_64-linux-gnu
inseriti come una posizione di ricerca automatica gratuitamente (con uno spazio vuoto PKG_CONFIG_PATH
) e, in effetti, molti .pc
file, tra cui GTK + et al. - vivi lì. Il motivo di ciò è abilitare la disponibilità multi-architettura di un pacchetto contemporaneamente, come indicato qui: askubuntu.com/questions/449348/…
pkg-config
cercheranno sul tuo sistema: askubuntu.com/a/373217/436580
Per vedere dove pkg-config (versione 0.24 o successive) cerca le librerie installate per impostazione predefinita, usare il comando seguente:
pkg-config --variable pc_path pkg-config
Per modificare quel percorso, impostare la PKG_CONFIG_PATH
variabile di ambiente. Gli stati del file man PKG_CONFIG_PATH
sono:
Un elenco di directory separate da due punti (su Windows, separate da punto e virgola) per cercare i file .pc. La directory predefinita verrà sempre cercata dopo aver cercato il percorso; il valore predefinito è libdir / pkgconfig: datadir / pkgconfig dove libdir è il libdir dove pkg-config e datadir è il datadir in cui è stato installato pkg-config.
echo $(pkg-config --variable pc_path pkg-config)${PKG_CONFIG_PATH:+:}${PKG_CONFIG_PATH}
PKG_CONFIG_PATH
e avere ancora directory ricercate predefinite, inoltre l'impostazione di un valore non vuoto non cancella i valori predefiniti.
Stai cercando di creare un software, diciamo Widget. Il widget si basa su un'altra libreria, libcog per motivi di discussione. Il processo di generazione del widget (probabilmente uno script di configurazione) sta usando pkg-config per determinare come usare libcog. pkg-config non sa nulla di libcog.
Se libcog non è installato, questo è il tuo problema. C'è una buona probabilità che un'installazione standard di libcog risolva il problema. A seconda del sistema in uso, potrebbe essere necessario installare una versione aggiuntiva "sviluppatore" del pacchetto; spesso ha "-devel" o "-dev" alla fine, quindi se si installa "libcog", potrebbe essere necessario installare "libcog-devel".
Se è installato libcog, probabilmente non è installato in modo tale che pkg-config possa trovarlo. Probabilmente c'è un file libcog.pc da qualche parte sul tuo sistema. Per ragioni di argomento, è su /opt/cog/lib/pkgconfig/libcog.pc. In tal caso, puoi dirlo a pkg-config impostando PKG_CONFIG_PATH sulla directory che contiene libcog.pc. Quindi in una shell Bourne o simile, qualcosa del genere
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/opt/cog/lib/pkgconfig/
Una volta fatto, rieseguendo il comando che fallisce, si spera che funzioni.
Se è installato libcog, incluse le librerie e i file di intestazione, e non hai un file libcog.pc, le cose stanno andando male. Presumibilmente un'installazione standard di libcog include le informazioni, altrimenti Widget non farebbe affidamento su di esse. Innanzitutto esaminerei la reinstallazione di libcog. È possibile creare manualmente il file libcog.pc, ma farlo correttamente è difficile e altamente specifico per una determinata libreria.
Ho guardato la pagina man sul mio sistema a 64 bit e mi sono un po 'confuso. Diceva in una riga:
pkg-config recupera le informazioni sui pacchetti da speciali file di metadati. Questi file prendono il nome dal pacchetto, con l'estensione .pc. Di default, pkg-config cerca nel prefisso di directory / lib / pkgconfig questi file; cercherà anche nell'elenco di directory separate da due punti (su Windows, punto e virgola) specificate dalla variabile di ambiente PKG_CONFIG_PATH.
Avevo supposto che stesse sempre nelle directory lib / pkgconfig. Si scopre che sono le directory stesse. Nel mio caso, stavo cercando di compilare il tutorial ciao mondo gtk. Individuo il file che voglio ad es
locate gtk | grep '\.pc'
Tra i risultati ci sono:
/usr/lib/x86_64-linux-gnu/pkgconfig/gtk+-3.0.pc
Alla fine doveva fare un'esportazione.
export PKG_CONFIG_PATH=/usr/lib/x86_64-linux-gnu/pkgconfig/
man
pagina si sta semplificando eccessivamente per i sistemi moderni e multi-architettura. Sono stato confuso per un po 'perché, su Debian 8 x86, pkg-config
guarda già nella cartella x86_64 (senza nulla dentro PKG_CONFIG_PATH
). Non sono sicuro di come sia stato incorporato, ma la riga di comando per sondare ciò mostrato da @GrandAdmiral indica che è controllato da --variable pc_path
quello impostato (in qualche modo!) Per pkg-config
il proprio pacchetto.
Mi sembra che la maggior parte delle risposte contenga troppe informazioni del necessario.
Il software che si installa può (e di solito lo fa) fare affidamento su alcune librerie e / o intestazioni e il Sistema utilizza pkg-config per trovarle.
Detto questo, pkg-config
cerca questi file nelle directory di sistema predefinite (predefinite). Quelle cartelle sono "prefisso". Ad esempio, una libreria con prefisso /usr/local
dovrebbe contenere intestazioni /usr/local/include
e la libreria stessa verrà inserita /usr/local/lib
.
pkg-config cerca comunque le librerie anche nella directory elencata nella variabile d'ambiente PKG_CONFIG_PATH .
Quindi, se installi software al di fuori dell'elenco predefinito di cartelle, devi "regolare" l'elenco, vale a dire aggiungere le tue directory a PKG_CONFIG_PATH
$ export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:<your-directory>
PKG_CONFIG_PATH
specifica ulteriori directory in cui cercare solo i file yourPkg.pc
(di pkg-config
specifica). Non influisce su cose specifiche di pkg come le directory di ricerca delle biblioteche.
Stavo cercando di installare l'ultima versione di axel e ho corso ./configure
e ho ottenuto questo:
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.
Quindi ho provato:
$ pkg-config --cflags openssl
e ho ottenuto:
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
Come ovvio avevo installato openssl ( sudo apt-get install openssl
) Ma sull'output sopra come puoi vedere dice "Nessun pacchetto 'openssl' trovato". Quindi, per essere sicuro di averlo fatto:
find / -type f -name "*.pc" |& grep -iv permission | grep openssl
Risulta che ho sicuramente bisogno di qualche altro pacchetto, quindi un po 'googling e ho scoperto che dovevo installare questo pacchetto:
sudo apt-get install libssl-dev
E tutto ciò non ha nulla a che fare con la modifica della variabile env del percorso pkg-config.
Coloro che utilizzano https://github.com/confluentinc/confluent-kafka-go
Seguire l' installazione librdkafka
Ora puoi usare go install / go run go build