다음 명령을 호출하면:
ldd mylib.so
그러면 다음과 같은 결과가 생성됩니다.
libopencv_features2d.so.4.1 => /usr/local/lib/libopencv_features2d.so.4.1 (0x00007f83dee6b000)
/usr/local/lib/libopencv_features2d.so.4.1
현재 작업 디렉토리에 복사하면 ldd가 표시될 것으로 예상됩니다.=> ./libopencv_features2d.so.4.1 (0x00007f83dee6b000)
대신에 여전히 /usr/local/lib
. 이와 같은 시스템 종속성을 어떻게 해결할 수 있습니까? 종속성 해결 방법에 영향을 줄 수 있는 방법도 있습니까? 강제로 내 로컬 디렉터리로 해석되도록 할 수 있나요?
답변1
동적 링커는 다양한 위치에서 라이브러리를 찾지만 기본적으로 현재 디렉터리는 포함하지 않습니다. 리눅스에서는,목록은 다음과 같습니다
- 바이너리의 rpath(있는 경우)에 정의된 경로입니다.
LD_LIBRARY_PATH
(있는 경우) 에 나열된 경로입니다 .- 바이너리의 실행 경로(있는 경우)에 정의된 경로입니다.
- 알려진 라이브러리
/etc/ld.so.cache
; - 시스템의 라이브러리 경로(
/usr/lib
등).
위의 링크에 자세한 내용이 나와 있습니다.
LD_LIBRARY_PATH
특히 귀하의 경우 내보내기를 통해 종속성을 해결하는 방법에 영향을 미칠 수 있습니다 .
export LD_LIBRARY_PATH=.
(이 값으로 설정하지 마십시오.)