pkg-config 플래그는 상대적입니다.

pkg-config 플래그는 상대적입니다.

컴파일하려고하는데골밀도 도구맞춤형 버전으로libav 11~/libav-11.8/buildUbuntu 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

관련 정보