Rozważ dostosowanie zmiennej środowiskowej PKG_CONFIG_PATH, jeśli oprogramowanie zostało zainstalowane w niestandardowym prefiksie. Co to znaczy ?
Rozważ dostosowanie zmiennej środowiskowej PKG_CONFIG_PATH, jeśli oprogramowanie zostało zainstalowane w niestandardowym prefiksie. Co to znaczy ?
Odpowiedzi:
PKG_CONFIG_PATH
to zmienna środowiskowa, która określa dodatkowe ścieżki, w których pkg-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 zastosowaniem pkg-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:
echo $PKG_CONFIG_PATH
Aby ustawić PKG_CONFIG_PATH
wartość, użyj:
export PKG_CONFIG_PATH=/usr/lib/pkgconfig
lub
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
Pierwsza odpowiedź nie jest wystarczająco precyzyjna z technicznego punktu widzenia. Ze strony podręcznika (otwórz terminal, wpisz man pkg-config
):
pkg-config
pobiera informacje o pakietach ze specjalnych plików metadanych. Te pliki są nazwane na cześć pakietu i mają.pc
rozszerzenie. W większości systemów,pkg-config
wygląda na/usr/lib/pkgconfig
,/usr/share/pkgconfig
,/usr/local/lib/pkgconfig
i/usr/local/share/pkgconfig
dla tych plików. Dodatkowo zajrzy do listy katalogów określonych przezPKG_CONFIG_PATH
zmienną środowiskową, oddzieloną dwukropkami (w systemie Windows, oddzieloną średnikami) .
Tak więc pkg-config
programu nie ma w PKG_CONFIG_PATH
katalogu; Jeśli jednak zainstalujesz bibliotekę, aby informacja o tym, że automake
mogła być dostępna w skrypcie, była dostępna, musi znajdować się w katalogu pkg-config
.
/usr/local/lib/x86_64-linux-gnu
wrzuceni jako automatyczna lokalizacja wyszukiwania za darmo (z pustym PKG_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/436580
Aby zobaczyć, gdzie pkg-config (wersja 0.24 lub nowsza) domyślnie szuka zainstalowanych bibliotek, użyj następującego polecenia:
pkg-config --variable pc_path pkg-config
Aby zmodyfikować tę ścieżkę, ustaw PKG_CONFIG_PATH
zmienną środowiskową. Stan pliku man PKG_CONFIG_PATH
to:
Rozdzielona dwukropkami (w systemie Windows, oddzielona średnikami) lista katalogów do wyszukiwania plików .pc. Domyślny katalog będzie zawsze przeszukiwany po przeszukaniu ścieżki; wartość domyślna to libdir / pkgconfig: datadir / pkgconfig gdzie libdir to libdir, gdzie pkg-config i datadir to datadir, w którym zainstalowano pkg-config.
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
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/opt/cog/lib/pkgconfig/
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.
Spojrzałem na stronę podręcznika w moim 64-bitowym systemie i byłem trochę zdezorientowany. Powiedział w jednym wierszu:
pkg-config pobiera informacje o pakietach ze specjalnych plików metadanych. Pliki te są nazwane na cześć pakietu z rozszerzeniem .pc. Domyślnie pkg-config szuka tych plików w prefiksie katalogu / lib / pkgconfig; będzie również szukał na liście katalogów określonych w zmiennej środowiskowej PKG_CONFIG_PATH rozdzielonej dwukropkami (w systemie Windows, rozdzielonej średnikami).
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
locate gtk | grep '\.pc'
Wśród wyników są:
/usr/lib/x86_64-linux-gnu/pkgconfig/gtk+-3.0.pc
Wreszcie miał zrobić eksport.
export PKG_CONFIG_PATH=/usr/lib/x86_64-linux-gnu/pkgconfig/
man
strona upraszcza w przypadku nowoczesnych systemów obsługujących wiele architektur. Przez pewien czas byłem zdezorientowany, ponieważ na Debianie 8 x86 pkg-config
już szuka w folderze x86_64 (bez niczego PKG_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ś!) Dla pkg-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
$ export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:<your-directory>
PKG_CONFIG_PATH
określa dodatkowe katalogi, w których można wyszukiwać tylko pliki yourPkg.pc
( pkg-config
specyfikacji). Nie wpływa na rzeczy specyficzne dla pkg, takie jak katalogi wyszukiwania bibliotek.
Próbowałem zainstalować najnowszą wersję Axela i pobiegłem ./configure
i otrzymałem to:
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.
Więc próbowałem:
$ pkg-config --cflags openssl
i mam:
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
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:
find / -type f -name "*.pc" |& grep -iv permission | grep openssl
Okazuje się, że na pewno potrzebuję innego pakietu, więc trochę googling i okazało się, że musiałem zainstalować ten pakiet:
sudo apt-get install libssl-dev
A wszystko to nie miało nic wspólnego ze zmianą zmiennej env pkg-config path.
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