리눅스는 공유 라이브러리를

1. 공유 라이브러리 (공유 라이브러리) 및 정적 라이브러리 (정적 라이브러리)의 차이  

  • 공유 라이브러리 파일의 접미사로 ".so는"( ".DLL"윈도우 플랫폼, 맥 OS 플랫폼 ".dylib")입니다. 이 문서의 모든 코드와 라이브러리는 프로그램이 런타임에를 의미합니다. 이 프로그램은 코드의 일부로 사용하기 위해 공유 라이브러리에 공유 라이브러리 참조를 사용합니다.
  • 정적 라이브러리는 파일의 접미사로 ".A"(Windows 플랫폼 "lib 디렉토리")입니다. 이 파일의 모든 코드와 라이브러리는 컴파일 타임에 정적 라이브러리는 직접 프로그램에 연결되어 있습니다. 당신이 정적 라이브러리 중에서 자신에게 그것을 사용하고자하는 프로그램 코드의 정적 라이브러리 복사본을 사용합니다.
  • 공유 라이브러리는 반복 코드 프로그램의 수를 줄일 수 있습니다, 그래서 프로그램은 작은. 당신이 공유 객체를 대체하기 위해 같은 기능 객체를 사용할 수 있도록하고, 그래서 당신은 동시에 증가 성능 라이브러리를 사용하는 프로그램을 다시 컴파일 할 수 없습니다. (가) 라이브러리 기호는 그들이 사용하는 일에 연관 될 필요가 공유하기 때문에 그러나 기능을 수행하는 비용의 공유 라이브러리 작은 증가의 사용은 또한, 부하를 실행의 비용을 증가시킬 것이다. 공유 라이브러리는 프로그램으로 런타임에로드 할 수있는 가장 일반적인 바이너리 플러그인 구현 메커니즘의 시스템.
  • 일반적으로 정적 라이브러리 프로그램의 볼륨을 증가뿐만 아니라 라이브러리를 사용하여 어디서든, 복사 언제든지 수행 할 필요가 없습니다 의미합니다. 코드가 컴파일시에 함께 연관되어했기 때문에, 그래서 런타임에 추가 소비가 없습니다. 

제 2. GCC /usr/local/lib검색 라이브러리, 둘째 /usr/lib, 다음 검색 -L파라미터를 지정하는 경로 탐색 순서와 -L동일한 경로의 순서로 주어진 파라미터.    

3. 기본 GNU 로더는 ld.so, 다음과 같은 순서로 라이브러리 파일을 검색 :

  • 첫째, 검색 프로그램 DT_RPATH영역이 존재하지 않는 DT_RUNPATH지역.
  • 두 번째 검색 LD_LIBRARY_PATH. 프로그램이 경우 setuid/setgid보안상의 이유로이 단계를 건너 뜁니다.
  • 검색 DT_RUNPATH절차가 아닌, 지역 setuid/setgid.
  • 검색 캐시 파일 /etc/ld/so/cache(이 단계는 사용하지 않도록 설정할 수 있습니다 -z nodeflib매개 변수)
  • 기본 디렉토리를 검색 /lib한 후, 그리고 /usr/lib(이 단계를 비활성화 사용하는 -z nodeflib매개 변수).

 

          

 

추천

출처www.cnblogs.com/along4396/p/11893993.html