C 프로그램이 컴파일되면 컴파일러는 객체 코드를 생성합니다. 객체 코드를 생성 한 후 컴파일러도 링커를 호출합니다. 링커의 주요 작업 중 하나는 라이브러리 함수의 코드(예:printf(),scanf(),sqrt(),..등)귀하의 프로그램에 사용할 수 있습니다. 링커를 달성할 수 있는 이 작업에는 두 가지 방법에 의하여,복사하는 코드 라이브러리 함수 개체 코드,또는 어떤 준비를함으로써 그래서는 전체 코드의 라이브러리 함수가 복사되지 않지만,사용할 수 있 at run-time.,
정적 링크 및 정적 라이브러리는 링커가 사용 된 모든 라이브러리 함수의 복사본을 실행 파일에 만든 결과입니다. 정적 연결은 더 큰 바이너리 파일을 만들고 디스크와 메인 메모리에 더 많은 공간이 필요합니다. 정적 라이브러리(정적으로 연결된 라이브러리)의 예는,.리눅스에서 파일 및.Windows 의 lib 파일.
정적 라이브러리를 만드는 단계 OS 와 같은 UNIX 또는 UNIX 에서 정적 라이브러리를 만들고 사용할 수 있습니다.
1. 라이브러리에 함수가 포함 된 C 파일을 만듭니다.,div>
#include <stdio.h>
void
fun(
void
)
{
printf
(
"fun() called from a static library"
);
}
We have created only one file for simplicity., 라이브러리에서 여러 파일을 만들 수도 있습니다.피><피>2. 를 만들고 헤더 파일에 대한 도서관
void
fun(
void
);
3. 라이브러리 파일을 컴파일하십시오. 나는 이것을 할 수 없다. 정적 라이브러리를 만듭니다., 이 단계는 하나의 정적 라이브러리에 여러 객체 파일을 번들로 묶는 것입니다(자세한 내용은 ar 참조). 이 단계의 출력은 정적 라이브러리입니다.나는 이것을 할 수 있다고 생각한다. 이제 우리의 정적 라이브러리를 사용할 준비가되었습니다. 이 시점에서 우리는 단지 lib_mylib 를 복사 할 수 있습니다.그것을 사용할 다른 곳. 데모 목적으로 라이브러리를 현재 디렉토리에 보관하겠습니다.
우리가 만든 정적 라이브러리 위에 사용하는 드라이버 프로그램을 만들 수 있습니다.
1., 을 만들 C 파일과 주요 기능
#include "lib_mylib.h"
void
main()
{
fun();
}
2., 드라이버 프로그램을 컴파일하십시오. 나는 이것이 내가 할 수있는 유일한 방법이라고 생각한다. 컴파일 된 드라이버 프로그램을 정적 라이브러리에 연결하십시오. -L 은 정적 라이브러리가 현재 폴더에 있음을 알리는 데 사용됩니다(-L 및-l 옵션에 대한 자세한 내용은 이 참조). 나는 이것을 할 수 없다. 실행 드라이버 프로그램
./driver fun() called from a static library
중 일부는 다음과 같은 중요한 포인트에 대한 정적 라이브러리입니다.
1. 에 대한 정적 라이브러리,실제 코드에서 추출된 라이브러리 링커 및을 구축하는 데 사용되는 최종 실행 시점에서 컴파일 구축/응용 프로그램입니다.,쨈챘짹쨀째쩔징 쨈챘쩔짤 쨘쨍쨀쨩쩔징 쨈챘 쨘쨍쨀쨩쨈쨈. 각 프로세스는 코드 및 데이터의 자체 복사본을 가져옵니다. 여기서 동적 라이브러리의 경우와 마찬가지로 코드 만 공유되며 데이터는 각 프로세스에 특정됩니다. 정적 라이브러리의 경우 메모리 발자국이 더 큽니다. 는 경우,예를 들어 모든 윈도우 시스템 도구를 정적으로 링크된,수십 mb RAM 것을 낭비에 대한 일반적인 사용자,사용자는 것이 둔화에 의해 아래로 많이징이다.피><피>3. 라이브러리 코드는 컴파일 타임에 연결되므로 최종 실행 파일은 런타임에 라이브러리에 종속성이 없습니다., 추가 실행시 선적 비용,그것은 당신을 의미를 수행 할 필요가 없이라의 라이브러리가 사용하고 있는 모든 것을 당신의 통제하에 없을 의미할 수 있습니다.피><피>4. 에 정적 라이브러리에 한번 모두께 제공되는 응용 프로그램,당신을 걱정할 필요가 없는 클라이언트가 있고 오른쪽 라이브러리(및 버전)에서 사용 가능한 시스템입니다.피><피>5. 단점 중 하나는 정적 라이브러리는,어떠한 변경(업데이션)에서 정적 라이브러리,당신이 컴파일하는 메인 프로그램의 모든 시간입니다. 피><피>6., 지금도 선호되는 정적 라이브러리의 한 가지 주요 이점은”속도”입니다. 정적 라이브러리의 심볼에 대한 동적 쿼리는 없을 것입니다. 많은 생산 라인 소프트웨어는 오늘날에도 정적 라이브러리를 사용합니다.
동적인 연결 및 동적 라이브러리를 동적 연결이 필요하지 않 코드를 복사,수행,설치의 이름은 라이브러리에서는 바이너리 파일입니다. 실제 연결은 프로그램이 실행될 때 이진 파일과 라이브러리가 모두 메모리에있을 때 발생합니다. 동적 라이브러리(런타임에 링크 된 라이브러리)의 예는 Linux 및.so 입니다.windows 에서 dll.,
우리는 곧 동적 라이브러리와이를 만드는 단계에 대한 더 많은 요점을 다룰 것입니다.
이 기사는 Abhijit Saha 에 의해 컴파일되고 GeeksforGeeks 팀에 의해 검토됩니다. 잘못된 것을 발견하거나 위에서 논의한 주제에 대해 더 많은 정보를 공유하려는 경우 의견을 적어주십시오.
주의 독자! 지금 배우는 것을 멈추지 마십시오. 학생 친화적 인 가격에 CS 이론 과정과 SDE 인터뷰에 대한 모든 중요한 CS 이론 개념의 보류를 얻고 산업 준비가 될.