pkg-config
저는 C++ 컴파일 중에 올바른 라이브러리를 제공하는 데 이를 사용합니다 . 내가 이해한 바로는 include 지시문을 가리켜 다음 라이브러리 위치를 참조 /etc/ld.so.conf
했습니다 .ld.so.conf
/etc/ld.so.conf.d/*.conf
/usr/local/lib
/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu
문제는 내가 필요한 라이브러리가 /usr/lib
기본적으로 아래에 있다는 것입니다.
이 경로를 /etc/ld.so.conf
내 경로에 추가하거나 라이브러리를 이동할 수 있습니까? 아니면 권장되는 방법은 무엇입니까?
답변1
명확히 하기 위해 : 이 파일은 실행에 로드되는 바이너리의 기호를 확인하는 /etc/ld.so.conf
동적(런타임) 링커/로더(Linux)에서 사용됩니다 (여기에는 공유 라이브러리도 포함됩니다). 이는 여러 개체/아카이브를 함께 조립하고 해당 종속성을 해결하는 데 사용되는 ld-linux.so
링커와 대조됩니다 .ld
동적 링커는 /etc/ld.so.conf
바이너리를 로드할 때 공유 라이브러리를 찾아야 하는 디렉터리 목록을 확인합니다. 거기에 언급된 경로 외에도 링커는 기본 경로도 검색합니다(Linux에서는 /lib
일반적 으로 64비트 로더로 /usr/lib
변경됨 ).lib64
~하지 않는 한이 바이너리는 이 기능을 명시적으로 비활성화하는 플래그( -x nodefaultlib
binutils' ld
)와 연결되어 있으며, 이 경우 ld.so.conf
.
답변2
pkg-config는 ld.so.conf를 전혀 사용하지 않으며 일반적으로 구성 파일을 에 저장합니다 /usr/lib/pkgconfig/
(필요한 경우 PKG_CONFIG 변수 지정).
즉/usr/lib/pkgconfig/libmtp.pc
# libmtp pkg-config source file
prefix=/usr
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
includedir=${prefix}/include
Name: libmtp
Description: libmtp is a library for accessing Media Transfer Protocol devices
Version: 1.1.5
Requires: libusb-1.0
Conflicts:
Libs: -L${libdir} -lmtp
Libs.private: -lgcrypt
Cflags: -I${includedir}
거기에서 cflags, libs 등을 찾을 수 있으며 이것이 pkg-config가 필요한 명령 매개 변수를 제공하는 방법입니다.
따라서 자신의 라이브러리를 위해 다음과 같은 파일을 만듭니다(여기에서 문서를 읽어보세요.)