C++ 정적 라이브러리와 동적 라이브러리의 관계
라이브러리란?
라이브러리는 기존의 성숙하고 재사용 가능한 코드로 작성됩니다. 실제로 모든 프로그램은 많은 기본 기본 라이브러리에 의존합니다. 모든 사람이 처음부터 코드를 시작하는 것은 불가능하므로 라이브러리의 존재는 매우 중요합니다.
정적, 동적이라는 말은 링크를 말합니다. 검토하자면, 프로그램을 실행 가능한 프로그램으로 컴파일하는 단계:
정적 라이브러리:
[정적 라이브러리]가 되는 이유는 링크되어 있습니다. 스테이지에서는 어셈블리에 의해 생성된 개체 파일 .o와 참조 라이브러리가 링크되어 실행 파일로 패키징됩니다. 따라서 해당 연결 방법을 정적 연결이라고 합니다.
어셈블리에 의해 생성된 정적 라이브러리와 대상 파일이 실행 파일로 함께 링크되어 있다고 상상해 보십시오. 그러면 정적 라이브러리는 .o 파일과 비슷한 형식을 가져야 합니다. 실제로 정적 라이브러리는 단순히 대상 파일(.o/.obj 파일)의 모음, 즉 많은 대상 파일을 압축하고 패키징하여 형성된 파일로 간주할 수 있습니다. 정적 라이브러리의 특징 요약:
1. 정적 라이브러리에 의한 함수 라이브러리의 연결은 컴파일 중에 완료됩니다.
2. 프로그램은 런타임에 함수 라이브러리와 아무런 관련이 없으므로 이식이 쉽습니다.
3. 관련된 모든 개체 파일과 관련 함수 라이브러리가 하나의 실행 파일로 연결되므로 공간과 리소스가 낭비됩니다.
위의 소개를 통해 정적 라이브러리가 사용하기 쉽고 이해하기 쉬우며 코드의 목적도 달성한다는 것을 알았습니다. 재사용, 그렇다면 왜 동적 라이브러리가 필요한가요?
동적 라이브러리가 왜 필요한가요?
동적 라이브러리가 필요한 이유는 사실 정적 라이브러리의 특성 때문입니다.
1. 공간 낭비는 정적 라이브러리의 문제입니다.
2. 또 다른 문제는 정적 라이브러리가 프로그램의 업데이트, 배포, 릴리스 페이지에 문제를 일으킬 수 있다는 것입니다. 정적 라이브러리 liba.lib가 업데이트되면 이를 사용하는 애플리케이션을 다시 컴파일하여 사용자에게 릴리스해야 합니다(플레이어의 경우 작은 변경일 수 있지만 전체 프로그램을 다시 다운로드하고 완전히 업데이트해야 함). .
동적 라이브러리는 프로그램이 컴파일될 때 대상 코드에 링크되지 않지만 프로그램이 실행될 때 로드됩니다. 서로 다른 애플리케이션이 동일한 라이브러리를 호출하는 경우 메모리에 공유 라이브러리의 인스턴스 하나만 있으면 공간 낭비 문제를 피할 수 있습니다. 프로그램 실행 시 동적 라이브러리가 로드되는데, 이는 정적 라이브러리가 프로그램의 업데이트, 배포, 릴리스 페이지에 문제를 일으킬 수 있는 문제도 해결합니다. 사용자는 동적 라이브러리를 업데이트하고 점진적으로 업데이트하기만 하면 됩니다.
동적 라이브러리 기능 요약:
1. 동적 라이브러리는 프로그램이 실행될 때까지 일부 라이브러리 기능에 대한 링크 로드를 연기합니다.
2. 프로세스 간 리소스 공유가 가능합니다. (그래서 동적 라이브러리를 공유 라이브러리라고도 합니다.)
3. 일부 프로그램의 업그레이드를 쉽게 해주세요.
4. 링크 로딩은 프로그램 코드(디스플레이 호출)에서 프로그래머가 완전히 제어할 수도 있습니다.