PKG_CONFIG_PATH 환경 변수


74

비표준 접두사로 소프트웨어를 설치 한 경우 PKG_CONFIG_PATH 환경 변수를 조정하십시오. 이것은 무엇을 의미 하는가 ?


1
"무엇이며 어떻게 사용합니까?"와 같은 PKG_CONFIG_PATH 환경 변수의 올바른 사용법에 대한 예를 물을 수 있다는 점을 제외하고는 거의 같은 방식으로 묻습니다. 당신이 얻은 답변이 당신에게 말한 것처럼 보입니다. 종속성을 찾지 못하면 ./configure 중에이 결과가 많이 나타납니다.
Douglas G. Allen

답변:


68

PKG_CONFIG_PATHpkg-config.pc 파일을 검색 할 추가 경로를 지정하는 환경 변수입니다 .

이 변수는 pkg-config의 기본 검색 경로를 보강하는 데 사용됩니다. 일반적인 유닉스 시스템에서는 디렉토리 /usr/lib/pkgconfig와 에서 검색합니다 /usr/share/pkgconfig. 일반적으로 시스템에 설치된 모듈을 다룹니다. 그러나 일부 로컬 모듈은와 같은 다른 접두사에 설치 될 수 있습니다 /usr/local. 이 경우 pkg-config가 .pc 파일을 찾을 수 있도록 검색 경로를 추가해야합니다.

pkg-config프로그램은 시스템에 설치된 라이브러리에 대한 정보를 검색하는 데 사용됩니다. 주요 용도 pkg-config는 프로그램을 라이브러리로 컴파일하고 링크하는 데 필요한 세부 정보를 제공하는 것입니다. 이 메타 데이터는 pkg-config 파일에 저장됩니다. 이 파일은 접미사 .pc를 가지며 pkg-config 도구에 알려진 특정 위치에 있습니다.

PKG_CONFIG_PATH값 을 확인하려면 다음 명령을 사용하십시오.

echo $PKG_CONFIG_PATH

PKG_CONFIG_PATH값 을 설정하려면 다음을 사용하십시오.

export PKG_CONFIG_PATH=/usr/lib/pkgconfig

또는

export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig

@NathanKidd 알림 주셔서 감사합니다. 댓글이 삭제되었습니다. 원래 오류는 원본이 아닌 저자 편집으로 인한 것 같습니다.
Timothy Gu

@remram 오류가 수정 된 것처럼 보이지만 편집 내역을 신중하게 검토하지 않으면 사람들이 혼란스럽게합니다. 현재 정확도에 만족하는지 확인하고 주석을 삭제할 수 있습니까? (그리고 난 내 삭제됩니다.)
네이 키드에게

@ devav2 두 가지 내보내기 명령으로 문제가 해결되지 않습니다
Shayan

38

첫 번째 대답은 기술적으로 충분히 명확하지 않습니다. 맨 페이지에서 (터미널을 열고을 입력하십시오 man pkg-config) :

pkg-config특수 메타 데이터 파일에서 패키지에 대한 정보를 검색합니다. 이 파일들은 패키지 이름을 따서 지어지며 .pc확장자가 있습니다. 대부분의 시스템에서 pkg-config 의 모습 /usr/lib/pkgconfig, /usr/share/pkgconfig, /usr/local/lib/pkgconfig/usr/local/share/pkgconfig이러한 파일. 또한 PKG_CONFIG_PATH환경 변수로 지정된 디렉토리의 콜론으로 구분 된 (Windows에서는 세미콜론으로 구분 된) 목록을 찾습니다 .

따라서 pkg-config프로그램은 PKG_CONFIG_PATH디렉토리에 없습니다 . 그러나 라이브러리를 설치하는 경우 automake스크립트에서 액세스 할 수 있도록 정보를 사용하려면 디렉토리 pkg-config에 있어야합니다.


핵심 문구는 "대부분의 시스템"에있는 것으로 보입니다. 예를 들어, 데비안에서는 /usr/local/lib/x86_64-linux-gnu무료로 자동 검색 위치 (공란 PKG_CONFIG_PATH)와 .pcGTK + 등을 포함하여 많은 파일 을 볼 수 있습니다. - 그곳에 살다. askubuntu.com/questions/449348/…
underscore_d

@GrandAdmiral이 페이지의 아래쪽에있는 답변에서 pkg-config시스템에서 검색 할 기본 경로를 확인하는 방법을 보여줍니다 . askubuntu.com/a/373217/436580
underscore_d

35

pkg-config (버전 0.24 이상)가 기본적으로 설치된 라이브러리를 검색하는 위치를 보려면 다음 명령을 사용하십시오.

pkg-config --variable pc_path pkg-config

해당 경로를 수정하려면 PKG_CONFIG_PATH환경 변수를 설정하십시오 . man 파일 상태 PKG_CONFIG_PATH는 다음과 같습니다.

.pc 파일을 검색 할 콜론으로 구분 된 (Windows에서는 세미콜론으로 구분 된) 디렉토리 목록입니다. 기본 디렉토리는 경로를 검색 한 후에 항상 검색됩니다. 기본값은 libdir / pkgconfig : datadir / pkgconfig입니다. 여기서 libdir은 libdir입니다. 여기서 pkg-config이고 datadir은 pkg-config가 설치된 datadir입니다.


3
유용한 스크립트는 다음과 같습니다echo $(pkg-config --variable pc_path pkg-config)${PKG_CONFIG_PATH:+:}${PKG_CONFIG_PATH}
albfan

5
이것은 큰 도움이되었습니다. 그러나 명확히하려면 공백을 가질 수 PKG_CONFIG_PATH있고 여전히 기본 검색 디렉토리를 가질 수 있고 공백 이 아닌 값을 설정해도 기본값이 지워지지 않으므로 "수정하려면"대신 "해당 경로에 추가"라고 말해야 합니다.
underscore_d

이 답변은 정말 유용했습니다. 감사합니다! Linuxbrew와 함께 광산을 설치 한 이후 pkg-config의 기본 검색 경로가 무엇인지 알아 내려고했기 때문에 기본 경로가 존재하지 않습니다. 감사!
mxplusb

6

위젯이라고 말하면 소프트웨어를 만들려고합니다. 위젯은 논쟁을 위해 다른 라이브러리 인 libcog에 의존합니다. 위젯의 빌드 프로세스 (아마도 configure 스크립트)는 pkg-config를 사용하여 libcog 사용 방법을 결정합니다. pkg-config는 libcog에 대해 아무것도 모릅니다.

libcog가 설치되어 있지 않으면 문제입니다. libcog의 표준 설치가 문제를 해결할 가능성이 높습니다. 시스템에 따라 추가 "개발자"버전의 패키지를 설치해야 할 수도 있습니다. 종종 끝에 "-devel"또는 "-dev"가 있으므로 "libcog"를 설치하는 경우 "libcog-devel"을 설치해야 할 수도 있습니다.

libcog가 설치된 경우 pkg-config가 찾을 수있는 방식으로 설치되지 않았을 수 있습니다. 시스템 어딘가에 libcog.pc 파일이있을 수 있습니다. 인수를 위해, 그것은 /opt/cog/lib/pkgconfig/libcog.pc에 있습니다. 이 경우 PKG_CONFIG_PATH를 libcog.pc를 포함하는 디렉토리로 설정하여 pkg-config에 알릴 수 있습니다. Bourne 쉘 또는 이와 유사한 것에서

export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/opt/cog/lib/pkgconfig/

완료되면 실패한 명령을 다시 실행하면 잘 작동합니다.

라이브러리 및 헤더 파일을 포함하여 libcog가 설치되어 있고 libcog.pc 파일이 없으면 제대로 작동하지 않습니다. 아마도 libcog의 표준 설치에는 정보가 포함되어 있거나 위젯은 정보에 의존하지 않을 것입니다. 먼저 libcog 재설치를 조사했습니다. libcog.pc 파일을 수동으로 생성 할 수 있지만, 올바른 라이브러리를 얻는 것은 어렵고 매우 구체적입니다.


4
한 가지-PKG_CONFIG_PATH가 정의 된 경우 어떻게해야합니까?
NoBugs

1
@NoBugs good catch, 대신 답변을 편집했습니다 (몇 년 후!).
Joe Malt

5

64 비트 시스템의 맨 페이지를보고 약간 혼란 스러웠습니다. 한 줄로 말했습니다.

pkg-config는 특수 메타 데이터 파일에서 패키지에 대한 정보를 검색합니다. 이 파일들은 .pc 확장자를 가진 패키지 이름을 따서 명명됩니다. 기본적으로 pkg-config는이 파일에 대한 디렉토리 접두사 / lib / pkgconfig를 찾습니다. 또한 PKG_CONFIG_PATH 환경 변수에 의해 지정된 디렉토리의 콜론으로 구분 된 (Windows에서는 세미콜론으로 구분 된) 목록을 찾습니다.

나는 그것이 lib / pkgconfig 디렉토리에 있다고 가정했습니다. 디렉토리 자체를 밝혀냅니다. 제 경우에는 hello world gtk tutorial을 컴파일하려고했습니다. 예를 들어 원하는 파일을 찾습니다.

locate gtk | grep '\.pc'

결과는 다음과 같습니다.

/usr/lib/x86_64-linux-gnu/pkgconfig/gtk+-3.0.pc

마지막으로 수출했다.

export PKG_CONFIG_PATH=/usr/lib/x86_64-linux-gnu/pkgconfig/

1
man현대의 다중 아키텍처 가능 시스템 에서 페이지가 어떻게 단순화 되는지를 +1 하십시오. 데비안 8 x86에서는 pkg-config이미 x86_64 폴더를 보았 기 때문에 잠시 혼란 스러웠습니다 PKG_CONFIG_PATH. 이것이 어떻게 통합되었는지는 확실하지 않지만 @GrandAdmiral이 보여주는 이것을 조사하는 명령 줄은 그것이 자신의 패키지에 --variable pc_path대해 설정된 것에 의해 제어된다는 것을 나타냅니다 pkg-config.
underscore_d

5

대부분의 답변에 필요한 것보다 많은 정보가있는 것 같습니다.

설치 한 소프트웨어는 (그리고 일반적으로) 일부 라이브러리 및 / 또는 헤더에 의존 할 수 있으며 시스템은 pkg-config를 사용하여 찾습니다.

따라서 pkg-config사전 정의 된 (기본) 시스템 디렉토리에서이 파일을 찾습니다. 해당 폴더는 "접두사"입니다. 예를 들어 접두사 /usr/local가 있는 라이브러리 에는 헤더가 있어야 /usr/local/include하고 라이브러리 자체는에 있습니다 /usr/local/lib. 그러나 pkg-config 는 환경 변수 PKG_CONFIG_PATH에 나열된 디렉토리에서도 라이브러리를 찾습니다 .

그런 다음 기본 폴더 목록 외부에 소프트웨어를 설치하는 경우 목록을 "조정"해야했던 디렉토리를 PKG_CONFIG_PATH에 추가하십시오.

$ export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:<your-directory>

자세한 내용은 여기여기를 참조하십시오


PKG_CONFIG_PATH( 사양) 파일 검색 할 추가 디렉토리를 지정 합니다. 라이브러리 검색 디렉토리와 같은 pkg 관련 항목에는 영향을 미치지 않습니다. yourPkg.pcpkg-config
underscore_d

1

그것은 당신이 소스에서 무언가를 만들려고 노력하고 있으며, 필요한 모든 의존성을 찾을 수는 없다는 것을 의미합니다. pkg-config은 해당 라이브러리의 개발 파일을 찾기 위해 사용하는 스크립트는이 메시지를 출력합니다.


0

최신 버전의 axel 을 설치하려고 했는데 실행 한 결과입니다 ./configure.

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.

그래서 나는 시도했다 :

$ pkg-config --cflags openssl

그리고 나는 얻었다 :

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

분명히 openssl을 설치했습니다 ( sudo apt-get install openssl). 그러나 위의 출력에서 ​​"No package 'openssl'found"가 표시됩니다. 그래서 내가했는지 확인하십시오.

find / -type f -name "*.pc" |& grep -iv permission | grep openssl

나는 확실히 다른 패키지가 필요하다는 것을 알았으므로 약간의 인터넷 검색 결과이 패키지를 설치해야한다는 것을 알았습니다.

sudo apt-get install libssl-dev

그리고이 모든 것은 pkg-config path env 변수 변경과 아무 관련이 없습니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.