2010-01-10 4 views
1

나는 리눅스에서 공유 라이브러리를 설치하는 방법을 알아보기 위해 makefile에서 어떻게 사용하는지 알아 냈다.Linux에서 정적 라이브러리 설치 - 동적 라이브러리 설치와 유사해야합니까?

그럼 괜찮습니다. 나는 이제 공유 객체와 한 쌍의 부드러운 링크를 가지고 있는데, 그 중 하나는 ldconfig와 하나씩 만들어졌습니다.

이제 라이브러리를 정적 라이브러리로 빌드 할 수 있습니다.

/usr/lib를 검사하면 거기에 .a 파일이있는 것을 볼 수 있습니다. 파일 이름에 심볼릭 링크, 버전 정렬 및 릴리스 번호 지정이 없습니다.

내 공유 객체를 정렬하는 것과 같은 방법으로 심볼 링크를 사용하여 정적 라이브러리를 배열해야합니까, 실제로는 정적 라이브러리를/usr/local/lib에 배치하는 것이 관례입니까?

답변

1

공유 라이브러리와 달리 /lib에 위치한 정적 라이브러리는 동적 연결 종속성 해결에 참여하지 않습니다. 앱을 만들 때만 사용됩니다. 따라서 심볼 링크와 정확한 릴리즈 번호를 파일 이름에 삽입 할 필요가 없습니다.

응용 프로그램을 정적 라이브러리에 연결하면 링커에서 /lib 폴더에있는 코드를 포함하기 만하면됩니다. 다른 시스템에서 동일한 이름을 가진 정적 라이브러리가 다를 경우 응용 프로그램도이를 알 수 없습니다. 정적 라이브러리의 코드를 포함하고 있기 때문에 컴파일 된 시스템은 실행중인 시스템에서이를 찾을 필요가 없습니다.

정적 라이브러리의 설치는 공유 된 라이브러리와 달라야합니다. /lib 디렉토리의 미세 버전 관리는 실제로 필요하지 않습니다.

+0

내 정적 라이브러리의 버전이 여러 개이고 다른 프로젝트의 다른 버전과 연결하고 싶다면 어떻게됩니까? –

+0

** 빌드 ** : 다른 디렉토리에서 다른 인스턴스를 준비하고 특정 메이크 파일을 대상으로 지정합니다. 공유 라이브러리에서는 기본적으로 동일합니다. ** 실행 ** : 정적 라이브러리의 코드가 실행 파일에 임베드되어 있으므로 시스템에 정적 라이브러리가있을 필요가 없습니다. –

+0

달리기에 대해 이해합니다. 당신은 정적으로 연결되어 있습니다. 그러나, 나는 건물에 관하여 noc 명확하다; 동일한 제 3 자 정적 라이브러리의 다른 버전과 정적으로 링크되는 두 개의 프로젝트를 말합니다. 정적 라이브러리가 라이브러리 디렉토리에 같은 이름 ('library.a')으로 덤프되는 경우 어떻게 다른 라이브러리 버전을 구별 할 수 있습니까? –