12.04에서 Ubuntu 14.04를 업그레이드하고 dist 업그레이드를 수행했습니다. 과거에는 ffmpeg, libglib 등 수동으로 많이 설치했습니다. 지금은 멋진 사용자 정의 배포판이 있고 잘 작동하지만 애플리케이션을 컴파일하는 데 문제가 있습니다. 이는 소스 코드에 수동으로 설치된 패키지와 기본 배포 라이브러리 간의 라이브러리 충돌로 인해 발생합니다. 한 사람이 이름을 바꾸라고 제안했지만 /usr/local
다음에 재부팅했을 때 부팅에 실패했습니다.
pkg-config
with에 의해 추가된 디렉토리를 찾을 때
pkg-config --variable pc_path pkg-config
그것은 나열
/usr/local/lib/i386-linux-gnu/pkgconfig:/usr/local/lib/pkgconfig:/usr/local/share/pkgconfig:/usr/lib/i386-linux-gnu/pkgconfig:/usr/lib/pkgconfig:/usr/share/pkgconfig
나는 그것이 길을 찾는 것을 원하지 않는다/usr/local/lib...
pkg-config
검색이 허용되지 않는 경로를 비활성화하려면 어떻게 해야 합니까 ?
답변1
의 콘텐츠는 /usr/local
일반적으로 의 콘텐츠를 대체하므로 /usr
"좋은 사용자 정의 배포"를 얻기 위해 라이브러리를 설치하고 싶지만 이에 대해 컴파일하고 싶지 않은 이유가 약간 혼란스럽습니다. 이는 시스템이 실제로 사용할 라이브러리입니다.
어쨌든 man pkg-config
기본 검색 경로를 선언합니다.
libdir/pkgconfig:datadir/pkgconfig입니다. 여기서도서관 디렉토리pkg-config의 libdir이고 데이터 디렉토리 pkg-config의 datadir입니다.설치되면.
즉, 그 안에 컴파일되어 있음을 의미합니다. 나는 이것이 Fedora와 $PKG_CONFIG_PATH
우분투 에서 다르다는 것을 알았습니다. 전자는 길고 포괄적인 반면, 후자는 짧고 독점적입니다. Fedora에서는 /usr/local
.
$PKG_CONFIG_PATH
경로를 확인했기 때문에첫 번째, 다음을 설정할 수 있습니다.
PKG_CONFIG_PATH=/usr/lib/i386-linux-gnu/pkgconfig:/usr/lib/pkgconfig:/usr/share/pkgconfig
이것이 내장 경로의 끝에 있다는 사실은 중요하지 않습니다. 검사가 거기에 도착했을 때 아무것도 찾지 못하면 아무것도 찾지 못할 것입니다.
이것이 어떻게 작동하는지 보여주기 위해 임시 디렉토리를 생성 /opt/bs/pkg
하고 .pc
기본 경로의 디렉토리 중 하나에서 파일을 복사합니다. 예를 들어 alsa.pc
.check 먼저;
> pkg-config --libs alsa
-lasound
이제 들어가서 ( 필드 에 있음 ) .set 으로 /opt/bs/pkg/alsa.pc
변경 하고 다시 시도하십시오.-lasound
Libs:
-foobar
$PKG_CONFIG_PATH
> PKG_CONFIG_PATH=/opt/bs/pkg pkg-config --libs alsa
-foobar
유레카, $PKG_CONFIG_PATH
내장 경로는 이미 덮어씌워져 있습니다. /opt/bs/pkg
물론 삭제할 수도 있습니다.