Rozważ dostosowanie zmiennej środowiskowej PKG_CONFIG_PATH, jeśli oprogramowanie zostało zainstalowane w niestandardowym prefiksie. Co to znaczy ?
pkg-config
MKJ
źródło
źródło
Odpowiedzi:
PKG_CONFIG_PATH
to zmienna środowiskowa, która określa dodatkowe ścieżki, w którychpkg-config
będą wyszukiwać swoje pliki .pc.Ta zmienna służy do rozszerzenia domyślnej ścieżki wyszukiwania pkg-config. W typowym systemie uniksowym przeszuka katalogi
/usr/lib/pkgconfig
i/usr/share/pkgconfig
. Zazwyczaj dotyczy to modułów zainstalowanych w systemie. Jednak niektóre lokalne moduły mogą być zainstalowane w innym prefiksem takich jak/usr/local
. W takim przypadku konieczne jest dodanie ścieżki wyszukiwania, aby pkg-config mógł zlokalizować pliki .pc.pkg-config
Program służy do pobierania informacji o zainstalowanych w systemie bibliotek. Podstawowym zastosowaniempkg-config
jest dostarczenie niezbędnych szczegółów do kompilacji i połączenia programu z biblioteką. Te metadane są przechowywane w plikach pkg-config. Pliki te mają sufiks .pc i znajdują się w określonych lokalizacjach znanych narzędziu pkg-config.Aby sprawdzić
PKG_CONFIG_PATH
wartość, użyj tego polecenia:Aby ustawić
PKG_CONFIG_PATH
wartość, użyj:lub
źródło
Pierwsza odpowiedź nie jest wystarczająco precyzyjna z technicznego punktu widzenia. Ze strony podręcznika (otwórz terminal, wpisz
man pkg-config
):Tak więc
pkg-config
programu nie ma wPKG_CONFIG_PATH
katalogu; Jeśli jednak zainstalujesz bibliotekę, aby informacja o tym, żeautomake
mogła być dostępna w skrypcie, była dostępna, musi znajdować się w katalogupkg-config
.źródło
/usr/local/lib/x86_64-linux-gnu
wrzuceni jako automatyczna lokalizacja wyszukiwania za darmo (z pustymPKG_CONFIG_PATH
) i rzeczywiście, wiele.pc
plików - godne uwagi, w tym GTK + i in. - żyć tutaj. Powodem tego jest jednoczesne włączenie pakietu dla wielu architektur, jak opisano tutaj: askubuntu.com/questions/449348/…pkg-config
będą wyszukiwać w twoim systemie: askubuntu.com/a/373217/436580Aby zobaczyć, gdzie pkg-config (wersja 0.24 lub nowsza) domyślnie szuka zainstalowanych bibliotek, użyj następującego polecenia:
Aby zmodyfikować tę ścieżkę, ustaw
PKG_CONFIG_PATH
zmienną środowiskową. Stan pliku manPKG_CONFIG_PATH
to:źródło
echo $(pkg-config --variable pc_path pkg-config)${PKG_CONFIG_PATH:+:}${PKG_CONFIG_PATH}
PKG_CONFIG_PATH
i nadal mieć domyślnie przeszukiwane katalogi, a ustawienie niepustej wartości nie usuwa domyślnych wartości.Próbujesz zbudować oprogramowanie, powiedzmy Widget. Widget opiera się na innej bibliotece, libcog ze względu na argument. Proces budowania widżetu (prawdopodobnie skrypt konfiguracyjny) używa pkg-config do określenia, jak korzystać z libcog. pkg-config nic nie wie o libcog.
Jeśli libcog nie jest zainstalowany, to jest twój problem. Istnieje duża szansa, że standardowa instalacja libcog rozwiąże problem. W zależności od systemu może być konieczne zainstalowanie dodatkowej wersji „deweloperskiej” pakietu; często ma na końcu „-devel” lub „-dev”, więc jeśli zainstalujesz „libcog”, być może będziesz musiał zainstalować „libcog-devel”.
Jeśli libcog jest zainstalowany, prawdopodobnie nie jest zainstalowany w taki sposób, aby mógł go znaleźć pkg-config. Prawdopodobnie gdzieś w systemie jest plik libcog.pc. Dla celów argumentu jest to na /opt/cog/lib/pkgconfig/libcog.pc. W takim przypadku możesz powiedzieć pkg-config o tym, ustawiając PKG_CONFIG_PATH na katalog zawierający libcog.pc. Więc w skorupce Bourne'a lub podobnej, coś w tym rodzaju
Po wykonaniu tej czynności ponowne uruchomienie polecenia, które się nie powiodło, będzie działać.
Jeśli zainstalowano libcog, w tym biblioteki i pliki nagłówkowe, a nie masz pliku libcog.pc, wszystko idzie źle. Przypuszczalnie standardowa instalacja libcog zawiera informacje, w przeciwnym razie Widget nie polegałby na nich. Najpierw zbadam ponowną instalację libcog. Możliwe jest ręczne utworzenie pliku libcog.pc, ale jego poprawne wykonanie jest trudne i bardzo specyficzne dla danej biblioteki.
źródło
Spojrzałem na stronę podręcznika w moim 64-bitowym systemie i byłem trochę zdezorientowany. Powiedział w jednym wierszu:
Założyłem, że tak też wygląda w katalogach lib / pkgconfig. Okazuje się, że same katalogi. W moim przypadku próbowałem skompilować samouczek GTK hello world. Znajduję plik, który chcę np
Wśród wyników są:
Wreszcie miał zrobić eksport.
źródło
man
strona upraszcza w przypadku nowoczesnych systemów obsługujących wiele architektur. Przez pewien czas byłem zdezorientowany, ponieważ na Debianie 8 x86pkg-config
już szuka w folderze x86_64 (bez niczegoPKG_CONFIG_PATH
). Nie jestem pewien, jak to zostało włączone, ale linia poleceń do sprawdzenia tego pokazana przez @GrandAdmiral wskazuje, że jest kontrolowany przez to,--variable pc_path
które jest ustawione (jakoś!) Dlapkg-config
własnego pakietu.Wydaje mi się, że większość odpowiedzi zawiera za dużo informacji, niż jest to potrzebne.
Oprogramowanie, które się instaluje, może (i zwykle robi) polegać na niektórych bibliotekach i / lub nagłówkach, a System używa pkg-config do ich znalezienia.
Mówiąc tak,
pkg-config
szuka tych plików w predefiniowanych (domyślnych) katalogach systemowych. Te foldery mają „prefiks”. Np. Biblioteka z prefiksem/usr/local
powinna mieć nagłówki/usr/local/include
, a sama biblioteka będzie w/usr/local/lib
. pkg-config szuka bibliotek również w katalogu wymienionym w zmiennej środowiskowej PKG_CONFIG_PATH .Następnie, jeśli instalujesz oprogramowanie poza domyślną listą folderów, musisz „dostosować” listę, a mianowicie dodać swoje katalogi do PKG_CONFIG_PATH
Aby uzyskać więcej informacji, możesz zajrzeć tutaj i tutaj
źródło
PKG_CONFIG_PATH
określa dodatkowe katalogi, w których można wyszukiwać tylko plikiyourPkg.pc
(pkg-config
specyfikacji). Nie wpływa na rzeczy specyficzne dla pkg, takie jak katalogi wyszukiwania bibliotek.Oznacza to, że próbujesz zbudować coś ze źródła i nie może znaleźć wszystkich potrzebnych zależności.
pkg-config
Skrypt korzysta znaleźć pliki rozwoju dla tych bibliotek, wysyła ten komunikat.źródło
Próbowałem zainstalować najnowszą wersję Axela i pobiegłem
./configure
i otrzymałem to:Więc próbowałem:
i mam:
Jak oczywiste miałem zainstalowany openssl (
sudo apt-get install openssl
) Ale na powyższym wyjściu, jak widać, napisano: „Nie znaleziono pakietu” openssl „znaleziony”. Aby upewnić się, że zrobiłem:Okazuje się, że na pewno potrzebuję innego pakietu, więc trochę googling i okazało się, że musiałem zainstalować ten pakiet:
A wszystko to nie miało nic wspólnego ze zmianą zmiennej env pkg-config path.
źródło
Ci, którzy używają https://github.com/confluentinc/confluent-kafka-go
Postępuj zgodnie z instalacją librdkafka
Teraz możesz użyć go install / go run go build
źródło