정적 라이브러리

Static library

컴퓨터 과학에서 정적 라이브러리(static linked library)는 컴파일 시 호출기에서 해결되어 컴파일러, 링커 또는 바인더에 의해 대상 응용 프로그램에 복사되어 객체 파일과 독립 실행 [1]파일을 생성하는 일련의 루틴, 외부 함수 및 변수입니다.이 실행 파일과 컴파일 프로세스는 모두 프로그램의 정적 빌드로 알려져 있습니다.이전에는 라이브러리가 정적일 수 밖에 없었습니다.정적 라이브러리는 빌드/링크 중에 다른 정적 라이브러리 및 객체 파일과 병합되어 단일 실행 파일을 형성하거나 런타임컴파일 시간/링크 시간에 결정된 정적 메모리 오프셋으로 대응하는 실행 파일의 주소 공간에 로드됩니다.

장점과 단점

라이브러리를 동적으로 링크하는 대신 실행 파일과 정적으로 링크하는 것에는 몇 가지 이점이 있습니다.가장 중요한 장점은 응용 프로그램이 모든 라이브러리가 존재하며 올바른 버전인지 확인할 수 있다는 것입니다.이를 통해 의존관계 문제를 피할 수 있습니다.이 문제는 일반적으로 DLL Hell 또는 보다 일반적으로 의존관계 지옥으로 알려져 있습니다.스태틱 링크에 의해, 애플리케이션을 1개의 실행 파일에 격납할 수도 있기 때문에, 배포와 인스톨을 간단하게 할 수 있습니다.

정적 링크에서는 대상 실행 파일(또는 대상 라이브러리)에 의해 직간접적으로 참조되는 라이브러리 부분을 포함하면 됩니다.동적 라이브러리를 사용하면 응용 프로그램에 의해 어떤 함수가 호출될지 미리 알 수 없기 때문에 라이브러리 전체가 로드됩니다.이 장점이 실제로 중요한지 여부는 라이브러리의 구조에 따라 달라집니다.

정적 링크에서는 라이브러리 코드가 별도의 파일이 아닌 실행 파일 내에 저장되기 때문에 실행 파일의 크기가 동적 링크보다 커집니다.그러나 라이브러리 파일이 응용 프로그램의 일부로 카운트되는 경우 전체 크기는 비슷하거나 컴파일러가 사용하지 않는 기호를 삭제하면 더 작아집니다.

환경 고유의

Microsoft Windows 에서는,[2] 애플리케이션에 필요한 라이브러리 파일을 애플리케이션에 포함시키는 것이 일반적입니다.Unix와 같은 시스템에서는 패키지 관리 시스템을 사용하여 올바른 라이브러리 파일을 사용할 수 있기 때문에 이 문제는 거의 발생하지 않습니다.이를 통해 라이브러리 파일을 여러 응용 프로그램 간에 공유할 수 있으므로 공간을 절약할 수 있습니다.또한 라이브러리를 사용하는 응용 프로그램을 업데이트하지 않고도 라이브러리를 업데이트하여 버그와 보안 결함을 해결할 수 있습니다.실제로 많은 실행 파일(특히 Microsoft Windows 를 대상으로 하는 파일)은 정적 라이브러리와 동적 라이브러리를 모두 사용합니다.

링크 및 로드

정적 라이브러리 함수는 다른 정적 라이브러리의 함수 또는 프로시저를 호출할 수 있습니다.링커 및 로더는 다른 오브젝트파일의 종류와 같은 방법으로 이 처리를 합니다.정적 라이브러리 파일은 실행 시 링크 로더(X11 모듈 로더 등)에 의해 링크될 수 있습니다.단, 이러한 프로세스를 스태틱링크라고 부를 수 있을지는 논란의 여지가 있습니다.

C/C++에서 정적 라이브러리 생성

스태틱 라이브러리는 C 또는 C++에서 쉽게 작성할 수 있습니다.이 두 언어는 다른 기능을 제공할 뿐만 아니라 외부 또는 내부 링크를 표시하기 위한 스토리지 클래스 지정자를 제공합니다.이러한 라이브러리를 만들려면 내보낸 함수/프로시저 및 기타 개체 변수를 외부 링크에 대해 지정해야 합니다(즉, C 키워드를 사용하지 않음).정적 라이브러리 파일 이름에는 보통 "가 있습니다..a" 확장자, Microsoft Windows[1] 확장자.lib 확장자.

예를 들어 class1.o, class2.o, class3.o 파일에서 libclass.a라는 이름의 아카이브를 작성하려면 다음 명령을 사용합니다.[1]

arcs libclass.a class1.o class2.o class3.o

class1.o, class2.oclass3.o에 의존하는 프로그램을 컴파일하려면 다음을 수행합니다.

cc main.clibclass.a

또는 (libclass.a가 /usr/local/lib와 같은 표준 라이브러리 경로에 배치된 경우)

cc main.c -lclass

또는 (링크 중)

ld... main.o -lclass... 

다음 대신:

cc main.c class1.o class2.o class3.o

「 」를 참조해 주세요.

레퍼런스

  1. ^ a b c "Static Libraries". TLDP. Retrieved 3 October 2013.
  2. ^ Anderson, Rick (2000-01-11). "The End of DLL Hell". microsoft.com. Archived from the original on 2001-06-05. Retrieved 2013-08-31. Private DLLs are DLLs that are installed with a specific application and used only by that application.