![pkg-config 플래그는 상대적입니다.](https://linux55.com/image/96871/pkg-config%20%ED%94%8C%EB%9E%98%EA%B7%B8%EB%8A%94%20%EC%83%81%EB%8C%80%EC%A0%81%EC%9E%85%EB%8B%88%EB%8B%A4..png)
컴파일하려고하는데골밀도 도구맞춤형 버전으로libav 11~/libav-11.8/build
Ubuntu 14.04에서 g++ 4.8.4를 사용하여 컴파일했습니다 . bmd는 g++ 플래그와 함께 pkg-config를 사용하여 빌드되었습니다. 링크 단계에서 컴파일이 실패했기 때문에 다음과 같이 pkg-config 출력을 테스트했습니다.
echo `pkg-config --cflags --libs libavcodec libavformat libswscale libavutil`
이것은 생산할 것입니다
-I/usr/local/include -pthread -L/usr/local/lib -lavformat -lavcodec
-ldl -lasound -lz -lwscale -lavutil -lm
그래서 커스텀 빌드 위치로 설정되지 않은 위치를 계산 -I
해서 표시해 두었습니다. -L
설정 PKG_CONFIG_PATH=~/libav-11.8/build/lib/pkgconfig
하고 다시 실행하면 생성됩니다.
-Ibuild/include -pthread -Lbuild/lib ...<lib flags>
빌드 루트 폴더에서 g++를 실행하면 이것이 정확합니다. pkg-config가 상대 경로 대신 절대 경로를 확인하면 안 되나요? 이 행동의 근거는 무엇입니까?
답변1
읽고 나서Freedesktop 패키지 구성 가이드나는 pkg-config가 바이너리, 라이브러리 또는 경로가 정확한지 확인하기 위해 아무 것도 하지 않았다는 것을 깨달았습니다. 파일에 Libs
쓰여진 Cflags
내용 만 뱉어냅니다 .pc
.
prefix
내 경우에는 libav의 컴파일 프로세스 에 의해 생성되고 configure
.
prefix
따라서 절대 경로로 설정된 libav를 다시 컴파일한 후 pkg-config는 다른 프로젝트의 컴파일에 사용하기에 적합한 플래그를 출력합니다 -I
.-L