티스토리 뷰

의 설정이 LD_LIBRARY_PATH가장 높은 우선 순위를 가지므로이 설정이 설정되면에서 언급 한 디렉터리 LD_LIBRARY_PATH집합
표준 디렉터리 집합보다 먼저 검색 됩니다. 따라서 귀하의 경우 설정은 옵션으로 언급 된 라이브러리 LD_LIBRARY_PATH조회에 영향을 미칩니다 . 일부 종속성 없으면 표준 디렉토리 세트에서 해결되었을 수 있습니다.
-lLD_LIBRARY_PATH

LD_LIBRARY_PATH디버깅에 대한 도움말을 설정 하고 최신 버전의
라이브러리 를 사용해보기는 하지만 일반 개발 환경 설정 및 배포에서 사용하는 것은 좋지 않은 것으로 간주됩니다.

공유 라이브러리에 대한 자세한 내용은 Linux 문서 의이 HOWTO참조하십시오.

-------------------

이 질문에 대한 두 가지 대답이 있습니다. 대답의 일부는 컴파일 타임 링크 (즉 gcc -lfoo -L/usr/lib...를 호출 함 ld)와 런타임 링커 조회에 있습니다.

프로그램을 컴파일 할 때 컴파일러는 구문을 확인한 다음 링커는 무엇보다도 실행에 필요한 심볼 (예 : 변수 / 메서드 등)이 있는지 확인합니다. LD_LIBRARY_PATH앞서 언급했듯이, 검색 경로를 수정하여 런타임 링커가 동작하는 방식뿐만 아니라 방식 gcc/ ld동작 을 변경하는 부작용이 있습니다.

프로그램을 실행할 때 런타임 링커는 실제로 공유 라이브러리 (디스크 또는 가능한 경우 메모리에서)를 가져오고 공유 기호 / 코드 등을로드합니다. 다시이 LD_LIBRARY_PATH검색 경로에 암시 적으로 영향을줍니다 (때로는 좋지 않은 경우도 있음). , 언급했듯이.)

LD_LIBRARY_PATH대부분의 Linux 시스템에서 사용하지 않고 이에 대한 올바른 수정은 공유 라이브러리가 포함 된 경로를에 추가하고 /etc/ld.so.conf(또는 일부 배포에서는 /etc/ld.so.conf.d/경로가 있는 파일을 생성 ) 실행 ldconfig( /sbin/ldconfig루트로)하여 런타임 링커 바인딩을 업데이트하는 것입니다. 은닉처.

Debian의 예 :

그런 다음 프로그램이 실행되면 런타임 링커는 해당 디렉토리에서 바이너리가 링크 된 라이브러리를 찾습니다.

런타임 링커가 알고있는 라이브러리를 알고 싶다면 다음을 사용할 수 있습니다.

그리고 바이너리가 연결된 라이브러리를 알고 싶다면 다음 ldd과 같이 사용할 수 있습니다. 이렇게하면 런타임 링커가 선택할 라이브러리를 알 수 있습니다.

-------------------

LD_LIBRARY_PATH응용 프로그램을 실행할 때 공유 라이브러리를 찾기위한 것입니다. 링크에 영향을 미치는 부작용이며 이에 의존해서는 안됩니다.

종종 원치 않는 부작용으로 LD_LIBRARY_PATH는 -L로 지정된 디렉토리 다음에 링크 (ld) 단계에서 검색됩니다 (또한 -L 플래그가 제공되지 않은 경우).

LD_LIBRARY_PATH가 나쁜 이유

-------------------

나는 생각했다, 나는 링커가 사용하는 다시 떨어지고 말 것입니다 LD_LIBRARY_PATH귀하의 직접 링크 (예 : 것을 해결 라이브러리에 libabc.so, libdef.solibghi.so) 동적에 연결되어 있습니다. 의 매뉴얼 페이지를 보면을 사용하여 빌드 된 ld에 대한 링크 가 동적으로 바인딩 된 기호의 조회 작동 방식에 영향을 미치는 것처럼 보입니다 ..so-rpath

-------------------

g ++에 대한 남자를 확인한 결과 제공된 경로에서 -lxxxxx옵션이 찾고 있다는 것을 알았습니다. 따라서 링크 할 때 파일 로드됩니다. 런타임에 라이브러리가 누락 된 경우 공유 객체로서의 라이브러리 만 있으므로 .so가로드 된 다음 . 내가 일하고 실행, 나는 몇 가지 라이브러리 디렉토리에 버전이 있음을보고 하고 나는 그것이 라이브러리가 연결시에 연결 또는 공유 개체로 런타임에 링크 될 수 있음을 의미한다고 생각하므로.libxxxxx.a-L.aLD_LIBRARY_PATHlibxxxx.alibxxxx.so

라이브러리가 공유 객체로만 존재하는 경우 LD_LIBRARY_PATH런타임에 라이브러리 디렉토리 경로 를 찾아야 함을 의미합니다. 라이브러리가 아카이브 된 .a로만 존재하는 경우 실행 파일의 빌드와 -L 디렉토리 경로에서 링크 -lxxxxx되어야하며 컴파일시 g ++에서 제공되어야 함을 의미합니다.

이것은 내 이해입니다 .... 그리고 적어도 그것은 당신의 관찰과 일치합니다



출처
https://stackoverflow.com/questions/1904990
댓글
공지사항
Total
Today
Yesterday
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30