라이브러리 파일(*.so)은 공유 종속성을 어떻게 해결합니까?

라이브러리 파일(*.so)은 공유 종속성을 어떻게 해결합니까?

다음 명령을 호출하면:

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=.

(이 값으로 설정하지 마십시오.)

관련 정보