.so, .la 및 .a 라이브러리 파일의 차이점은 무엇입니까?
.so
파일이 일종의 동적 라이브러리 라는 것을 알고 있습니다 (많은 스레드가 그러한 라이브러리를 공유 할 수 있으므로 메모리에 파일 사본을 두 개 이상 가질 필요가 없습니다). 그러나 .a
와 의 차이점은 무엇 .la
입니까? 이것들은 모두 정적 라이브러리입니까?
동적 라이브러리가 정적 라이브러리보다 큰 장점을 가지고 있다면 왜 여전히 정적 라이브러리가 많이 있습니까?
또한 라이브러리 (두 종류)를로드하는 기본 메커니즘과 어딘가에서 사용될 때 lib의 코드 조각이 어떻게 호출되는지 알고 싶습니다. 커널의 어느 부분을 연구해야합니까? 프로세스가 어떻게 실행되고 있는지 알기 위해서는 어떤 관련 Linux 명령 / 유틸리티를 알아야합니까? (지금까지만 ld
명령을 알고 있습니다)
언제 .so
또는에 코드를 작성하려고 .a
합니까? 어느 것이 더 낫습니까?
[mirror@home ins_openvpn]$ ls lib/openvpn/plugins/ -l
total 96
-rw-r--r-- 1 mirror mirror 22892 Sep 2 23:25 openvpn-plugin-auth-pam.a
-rwxr-xr-x 1 mirror mirror 931 Sep 2 23:25 openvpn-plugin-auth-pam.la
-rwxr-xr-x 1 mirror mirror 23621 Sep 2 23:25 openvpn-plugin-auth-pam.so
-rw-r--r-- 1 mirror mirror 17228 Sep 2 23:25 openvpn-plugin-down-root.a
-rwxr-xr-x 1 mirror mirror 932 Sep 2 23:25 openvpn-plugin-down-root.la
-rwxr-xr-x 1 mirror mirror 18805 Sep 2 23:25 openvpn-plugin-down-root.so
.so
파일은 동적 라이브러리 입니다. 라이브러리와 연결된 모든 응용 프로그램은 결과 실행 파일에 복사본을 만들지 않고 동일한 파일을 사용하기 때문에 접미사는 "공유 개체"를 나타냅니다.
.a
파일은 정적 라이브러리 입니다. 접미사는 "아카이브"를 나타냅니다. 왜냐하면 실제로 는 원본 .o 오브젝트 파일 의 아카이브 ( ar
이전에는 tar
라이브러리를 만드는 데 사용되는 명령) 로 만들어 졌기 때문 입니다.
.la
파일은 해당 라이브러리를 구성하는 파일을 설명하기 위해 GNU "libtools"패키지 에서 사용하는 텍스트 파일 입니다. 이 질문에서 그들에 대한 자세한 정보를 찾을 수 있습니다 : libtool의 .la 파일은 무엇입니까?
정적 라이브러리와 동적 라이브러리에는 각각 장단점이 있습니다.
정적 프로 : 사용자는 항상 응용 프로그램으로 테스트 한 라이브러리 버전을 사용하므로 놀라운 호환성 문제는 없습니다.
정적 단점 : 라이브러리에서 문제가 해결 된 경우이를 활용하려면 응용 프로그램을 재배포해야합니다. 그러나 사용자가 스스로 업데이트 할 가능성이있는 라이브러리가 아니라면 어쨌든이 작업을 수행해야합니다.
Dynamic pro : 라이브러리에 사용되는 메모리가 라이브러리를 사용하는 모든 프로세스에서 상각되므로 프로세스의 메모리 공간이 더 작습니다.
동적 프로 : 런타임시 라이브러리를 요청시로드 할 수 있습니다. 이것은 플러그인에 유용하므로 소프트웨어를 컴파일하고 설치할 때 사용할 플러그인을 선택할 필요가 없습니다. 새로운 플러그인을 즉시 추가 할 수 있습니다.
동적 연결 : 누군가 응용 프로그램을 설치하려는 시스템에 라이브러리가 없거나 응용 프로그램과 호환되지 않는 버전이있을 수 있습니다. 이를 완화하기 위해 애플리케이션 패키지는 라이브러리 사본을 포함해야 할 수 있으므로 필요한 경우 설치할 수 있습니다. 이는 또한 필요한 종속성을 다운로드하여 설치할 수있는 패키지 관리자에 의해 완화되기도합니다.
동적 라이브러리는 다음과 같은 시스템 라이브러리에 특히 유용합니다 libc
. 커널 인터페이스가 변경 되었기 때문에 이러한 라이브러리에는 종종 특정 OS 및 버전에 종속 된 코드가 포함되어야합니다. 프로그램을 정적 시스템 라이브러리와 링크하면이 라이브러리 버전이 작성된 OS 버전에서만 실행됩니다. 그러나 동적 라이브러리를 사용하면 실행중인 시스템에 설치된 라이브러리가 자동으로 선택됩니다.
참고 URL : https://stackoverflow.com/questions/12237282/whats-the-difference-between-so-la-and-a-library-files
'IT story' 카테고리의 다른 글
람다 함수를 템플릿으로 만들 수 있습니까? (0) | 2020.04.30 |
---|---|
`git diff --patience`는 무엇입니까? (0) | 2020.04.30 |
Java EE 란 무엇입니까? (0) | 2020.04.29 |
matplotlib에서 주어진 플롯에 수직선을 그리는 방법은 무엇입니까? (0) | 2020.04.29 |
웹 사이트를 다시 크롤링하도록 Google에 요청하는 방법은 무엇입니까? (0) | 2020.04.29 |