/etc/ld.so.conf에는 /usr/lib가 포함되어 있지 않습니다.

/etc/ld.so.conf에는 /usr/lib가 포함되어 있지 않습니다.

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 nodefaultlibbinutils' 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가 필요한 명령 매개 변수를 제공하는 방법입니다.

따라서 자신의 라이브러리를 위해 다음과 같은 파일을 만듭니다(여기에서 문서를 읽어보세요.)

관련 정보