Überlegen Sie, ob Sie die Umgebungsvariable PKG_CONFIG_PATH anpassen möchten, wenn Sie Software in einem nicht standardmäßigen Präfix installiert haben. Was bedeutet das ?
Überlegen Sie, ob Sie die Umgebungsvariable PKG_CONFIG_PATH anpassen möchten, wenn Sie Software in einem nicht standardmäßigen Präfix installiert haben. Was bedeutet das ?
Antworten:
PKG_CONFIG_PATH
ist eine Umgebungsvariable, die zusätzliche Pfade angibt, in denen pkg-config
nach ihren .pc-Dateien gesucht wird.
Diese Variable wird verwendet, um den Standardsuchpfad von pkg-config zu erweitern. Auf einem typischen Unix-System wird in den Verzeichnissen /usr/lib/pkgconfig
und gesucht /usr/share/pkgconfig
. Dies gilt normalerweise für vom System installierte Module. Einige lokale Module können jedoch in einem anderen Präfix installiert sein, z /usr/local
. In diesem Fall muss der Suchpfad vorangestellt werden, damit pkg-config die .pc-Dateien finden kann.
Das pkg-config
Programm wird zum Abrufen von Informationen zu installierten Bibliotheken im System verwendet. Der Hauptzweck von pkg-config
ist, die notwendigen Details zum Kompilieren und Verknüpfen eines Programms mit einer Bibliothek bereitzustellen. Diese Metadaten werden in pkg-config-Dateien gespeichert. Diese Dateien haben das Suffix .pc und befinden sich an bestimmten Orten, die dem pkg-config-Tool bekannt sind.
PKG_CONFIG_PATH
Verwenden Sie diesen Befehl, um den Wert zu überprüfen :
echo $PKG_CONFIG_PATH
Um den PKG_CONFIG_PATH
Wert einzustellen , verwenden Sie:
export PKG_CONFIG_PATH=/usr/lib/pkgconfig
oder
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
Die erste Antwort ist technisch nicht explizit genug. Auf der Manpage (öffnen Sie ein Terminal, geben Sie Folgendes ein man pkg-config
):
pkg-config
Ruft Informationen zu Paketen aus speziellen Metadatendateien ab. Diese Dateien sind nach dem Paket benannt und haben eine.pc
Erweiterung. Auf den meisten Systemenpkg-config
sieht in/usr/lib/pkgconfig
,/usr/share/pkgconfig
,/usr/local/lib/pkgconfig
und/usr/local/share/pkgconfig
für diese Dateien. Außerdem wird in der durch Doppelpunkte getrennten (unter Windows durch Semikolons getrennten) Liste der Verzeichnisse gesucht, die von derPKG_CONFIG_PATH
Umgebungsvariablen angegeben werden.
Das pkg-config
Programm befindet sich also nicht im PKG_CONFIG_PATH
Verzeichnis. Wenn Sie jedoch eine Bibliothek installieren, ist bekannt, dass die Informationen, die in einem automake
Skript verwendet werden sollen, in einem Verzeichnis gespeichert sein müssen, damit darauf zugegriffen werden kann pkg-config
.
/usr/local/lib/x86_64-linux-gnu
als automatischer Suchort kostenlos (mit einem leeren PKG_CONFIG_PATH
) eingebunden , und in der Tat viele .pc
Dateien - bemerkenswert, einschließlich GTK + et al. - dort leben. Der Grund dafür ist, die Verfügbarkeit eines Pakets für mehrere Architekturen gleichzeitig zu ermöglichen, wie hier beschrieben: askubuntu.com/questions/449348/…
pkg-config
auf dem System suchen: askubuntu.com/a/373217/436580
Verwenden Sie den folgenden Befehl, um festzustellen, wo pkg-config (Version 0.24 oder höher) standardmäßig nach installierten Bibliotheken sucht:
pkg-config --variable pc_path pkg-config
Um diesen Pfad zu ändern, legen Sie die PKG_CONFIG_PATH
Umgebungsvariable fest. Die Man-Datei PKG_CONFIG_PATH
lautet:
Eine durch Doppelpunkte getrennte (unter Windows durch Semikolon getrennte) Liste von Verzeichnissen, in denen nach PC-Dateien gesucht werden soll. Nach dem Durchsuchen des Pfads wird immer das Standardverzeichnis durchsucht. Die Standardeinstellung ist libdir / pkgconfig: datadir / pkgconfig, wobei libdir das libdir ist, in dem pkg-config und datadir das datadir ist, in dem pkg-config installiert wurde.
echo $(pkg-config --variable pc_path pkg-config)${PKG_CONFIG_PATH:+:}${PKG_CONFIG_PATH}
PKG_CONFIG_PATH
und immer noch standardmäßig durchsuchte Verzeichnisse vorhanden sein können und das Festlegen eines nicht leeren Werts die Standardwerte nicht löscht.
Sie versuchen, eine Software zu erstellen, sagen wir Widget. Widget stützt sich aus Gründen der Argumentation auf eine andere Bibliothek, libcog. Der Build-Prozess von Widget (wahrscheinlich ein Konfigurationsskript) verwendet pkg-config, um zu bestimmen, wie libcog verwendet wird. pkg-config weiß nichts über libcog.
Wenn libcog nicht installiert ist, ist das Ihr Problem. Es besteht eine gute Chance, dass eine Standardinstallation von libcog das Problem behebt. Abhängig von Ihrem System müssen Sie möglicherweise eine zusätzliche Entwicklerversion des Pakets installieren. Am Ende steht häufig "-devel" oder "-dev". Wenn Sie also "libcog" installieren, müssen Sie möglicherweise auch "libcog-devel" installieren.
Wenn libcog installiert ist, ist es wahrscheinlich nicht so installiert, dass pkg-config es finden kann. Möglicherweise befindet sich irgendwo auf Ihrem System eine libcog.pc-Datei. Aus Gründen der Argumentation finden Sie diese unter /opt/cog/lib/pkgconfig/libcog.pc. In diesem Fall können Sie pkg-config darüber informieren, indem Sie PKG_CONFIG_PATH auf das Verzeichnis setzen, das libcog.pc enthält. Also in einer Bourne-Shell oder ähnlichem sowas
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/opt/cog/lib/pkgconfig/
Sobald dies erledigt ist, funktioniert es hoffentlich, wenn Sie den fehlgeschlagenen Befehl erneut ausführen.
Wenn libcog installiert ist, einschließlich der Bibliotheken und Header-Dateien, und Sie keine libcog.pc-Datei haben, laufen die Dinge schlecht. Vermutlich enthält eine Standardinstallation von libcog die Informationen, sonst würde Widget sich nicht darauf verlassen. Ich würde zuerst die Neuinstallation von libcog untersuchen. Es ist möglich, die Datei libcog.pc manuell zu erstellen, aber es ist schwierig und sehr spezifisch für eine bestimmte Bibliothek.
Ich habe mir die Manpage auf meinem 64-Bit-System angesehen und war etwas verwirrt. In einer Zeile stand:
pkg-config ruft Informationen zu Paketen aus speziellen Metadatendateien ab. Diese Dateien sind nach dem Paket mit der Erweiterung .pc benannt. Standardmäßig sucht pkg-config im Verzeichnispräfix / lib / pkgconfig nach diesen Dateien. Es wird auch in der durch Doppelpunkte getrennten (unter Windows durch Semikolons getrennten) Liste der Verzeichnisse angezeigt, die von der Umgebungsvariablen PKG_CONFIG_PATH angegeben werden.
Ich hatte angenommen, dass es auch in den Verzeichnissen lib / pkgconfig aussieht. Es stellt sich heraus, die Verzeichnisse selbst. In meinem Fall habe ich versucht, das Hello World GTK-Tutorial zu kompilieren. Ich finde die Datei, die ich möchte, z
locate gtk | grep '\.pc'
Unter den Ergebnissen sind:
/usr/lib/x86_64-linux-gnu/pkgconfig/gtk+-3.0.pc
Schließlich sollte ein Export erfolgen.
export PKG_CONFIG_PATH=/usr/lib/x86_64-linux-gnu/pkgconfig/
man
einfach die Seite für moderne Systeme mit mehreren Architekturen ist. Ich war eine Weile verwirrt, weil ich unter Debian 8 x86 pkg-config
bereits im Ordner x86_64 nachgeschaut habe (ohne irgendetwas in PKG_CONFIG_PATH
). Ich bin nicht sicher, wie dies aufgenommen wurde, aber die von @GrandAdmiral angezeigte Befehlszeile zeigt an, dass sie durch das --variable pc_path
(irgendwie!) Für pkg-config
das eigene Paket festgelegte Steuerelement gesteuert wird .
Mir scheint, dass die meisten Antworten zu viele Informationen enthalten, als dass sie benötigt werden.
Die Software, die installiert wird, ist möglicherweise (und normalerweise) auf einige Bibliotheken und / oder Header angewiesen, und das System verwendet pkg-config, um diese zu finden.
Sucht also pkg-config
nach diesen Dateien in vordefinierten (Standard-) Systemverzeichnissen. Diese Ordner sind "Präfix". /usr/local
Zum Beispiel wird von einer Bibliothek mit Präfix erwartet, dass sie Header enthält /usr/local/include
, und die Bibliothek selbst befindet sich in /usr/local/lib
.
pkg-config sucht jedoch nach Bibliotheken auch in dem Verzeichnis, das in der Umgebungsvariablen PKG_CONFIG_PATH aufgeführt ist .
Wenn Sie dann Software außerhalb der Standardordnerliste installieren, mussten Sie die Liste "anpassen", dh Ihre Verzeichnisse zu PKG_CONFIG_PATH hinzufügen
$ export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:<your-directory>
PKG_CONFIG_PATH
Gibt zusätzliche Verzeichnisse an, in denen nur nach yourPkg.pc
( pkg-config
Spezifikations-) Dateien gesucht werden soll. Es hat keine Auswirkungen auf pkg-spezifische Dinge wie Bibliotheks-Suchverzeichnisse.
Ich habe versucht , die neueste Version von installieren axel und ich lief , ./configure
und ich habe dies:
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.
Also habe ich versucht:
$ pkg-config --cflags openssl
und ich bekam:
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
Wie offensichtlich, hatte ich openssl installiert ( sudo apt-get install openssl
), aber in der obigen Ausgabe steht, wie Sie sehen können, "No package 'openssl' found". Um sicherzugehen, dass ich es getan habe:
find / -type f -name "*.pc" |& grep -iv permission | grep openssl
Es stellte sich heraus, dass ich auf jeden Fall ein anderes Paket brauche, also habe ich ein bisschen gegoogelt und festgestellt, dass ich dieses Paket installieren musste:
sudo apt-get install libssl-dev
Und all dies hatte nichts mit der Änderung der Umgebungsvariablen pkg-config path zu tun.
Diejenigen, die https://github.com/confluentinc/confluent-kafka-go verwenden
Bitte folgen Sie der Installation von librdkafka
Jetzt können Sie go install / go run go build verwenden