[라이브러리의 정의]

라이브러리(library)는 다른 프로그램들과 링크되기 위하여 존재하는, 하나 이상의 서브루틴(subroutine)이나 함수(function)들의 집합 파일 말하는데 함께 링크(link)될 수 있도록 보통 컴파일된 형태인 목적코드(object code) 형태로 존재한다. 라이브러리는 코드 재사용을 위해 조직화된 오래된 기법 중의 하나이며, 많은 다른 프로그램들에서 사용할 수 있도록, 운영체계나 소프트웨어 개발 환경 제공자들에 의해 제공되는 경우가 많다. 

보통은 목적코드형태를 하나의 파일로 묶어 사용한다.

 


라이브러리가 생긴이유

1.코드의 재사용

2.코드의 부품화 실현

3. 소스를 제공하지 않아 기술 유출 방지

4. 사용자의 개발시간 단축

등의 이유가 있다.

 

 

프로그램 빌드 과정- 컴파일 과정

링킹은 프로그램을 빌드 하는 과정에서 (즉 컴파일 과정에서 거치는 단계이죠) 이뤄지는 말그대로 링크하는 과정입니다.

큰 의미의 컴파일 과정

[그림1]

이 전체를 크게 컴파일 과정이라고 해요.

작은의미의 컴파일로써는 저기 적혀있는 Compile 있죠? 저 구간을 컴파일이라고 합니다.

즉 Compiling + Linking 이 전 구간을 큰 의미의 컴파일, 저 Linking 구간을 제외한 Compiling 부문을 작은 의미의 컴파일이라고 지칭합니다.

 

운영체제는 C/C++언어와 그래도 연관이 깊으므로 C언어로 예를 들어볼게요 

대략 이렇게 우리가 코드를 짰다고 합시다. 그럼 이게 소스파일이예요. Source.cpp (이름.cpp)이렇게 저장되는 파일!

소스파일은 C언어나 java 등 이렇게 우리 인간들, 프로그래머들이 이해하기 쉽게 고급언어로 작성된 파일을 말합니다.

 

그리고 빌드하면! (비쥬얼 스튜디오에서는 Ctrl + shift + b) 

실제로 저런 과정(컴파일링 후 링킹 과정)을 얘네가 내부에서 진행한 후에 .exe파일을 딱 내보내주는거예요.

 

링커(Linker)의 링킹(Linking) 과정

 

이렇게 만들어진 Object file들을 링커가 링킹해서 실행파일로 만듭니다!

 

그림을 보니까 대략 목적파일과 라이브러리 파일들을 링크(더한게)한게 실행파일이라는 거 같죠? 맞습니다 ㅎㅎ

 

컴퓨터가 점점 발전함에 따라 디스크의 욕량도 늘어나고~ 램의 성능도 늘어나구~ 그러다보니 프로그램의 크기도 늘어나구~

 

소스코드 양이 그만큼 늘어남에 따라 한 파일에 모든 소스코드를 작성할 수 없게 됐어요 100000줄이나 넘는걸 어떻게 한 파일에서 관리하겠어요 

 

그래서 파일들을 분리해서 관리하죠.

링커라는 프로그램은

1. 이런 여러 소스코드 파일들을 하나로 합쳐요 즉 Object 파일들을 하나로 합칩니다.

2. 여기에 Library를 합쳐요 

라는 작업을 해서 실행파일을 만들어줘요 

1번째 과정이예요 여러 오브젝트 파일에 있는 동일한 섹션들을 하나의 덩어리로 합칩니다.

 

두 번째 링커가 하는 일은 라이브러리를 합치는 일이랬죠?

 

소스파일 그림에 cout는 cout이라는 클래스 라이브러리를 쓰기 때문에 사용할 수 있는거잖아요 #Include <iostream>이런거~

그 .exe파일 만들기 위해서 오브젝트 파일들 하나로 다 링크하고 이 exe파일에다가 라이브러리를 집어넣어서 실행파일을 완성하는 작업이 linking입니다 정확히는 static linking이예요 

 

 출처 : jhnyang.tistory.com/40

 

[OS]링킹(Linking)이란? 링커(Linker)란? 컴파일 과정,목적파일, 빌드과정

운영체제 목차 메모리 관리를 시작하기 앞서 메모리 관리와 관련된 몇 가지 단어들이 나오는데 이런 단어들을 이해를 못하고 있으면 안됩니다. Linking에 대해서는 프로그램 컴파일에 대해서 배��

jhnyang.tistory.com

 

 

실행 파일이 만들어 지기 까지의 과정

 

1. 전처리 단계 - 전처리기 (cpp)

: #include, #define 등 #으로 시작하는 문법 사항이 적절히 전처리된 C 언어 소스파일 생성

2. 컴파일 단계 - 컴파일러 (cc1) 

: C 언어 소스파일은 컴파일 과정을 거쳐 어셈블리 소스 파일이 됨

3. 어셈블 단계 - 어셈블러 (as)

:어셈블리 소스 파일은 어셈블 과정을 거쳐 목적 파일이 됨 

4. 링크 단계 - 링커 (ld)

: 목적 코드는 라이브러리와 링크되어 실행 가능한 파일이 됨

 

.c => 전처리기 => .i => 컴파일러 => .s => 어셈블러 => .o(목적코드) or .a(라이브러리 파일) => 링커 => .exe(실행파일)

출처: https://ra2kstar.tistory.com/176 [초보개발자 이야기.]

 

C 프로그래밍 : C 컴파일러 [gcc]

C 프로그래밍 C 컴파일러 : gcc C 코드를 작성하고 나서 컴파일을 하려 할때 기본적을 gcc 컴파일러를 많이 쓰게 된다. GNU에서 제공하는 gcc 컴파일러를 이용하여 UNIX 시스템에서 컴파일하고, 목적�

ra2kstar.tistory.com

nicewoong.github.io/development/2018/02/24/c-library-gcc-compile/

 

c 라이브러리 파일, gcc 컴파일 - nicewoong

아래와 같이 ar옵션 그리고 생성하고자 하는 라이브러리의 이름, 마지막으로 오브젝트 파일들의 이름을 나열한후 실행 한다. (※ 윈도우에서 라이브러리 파일의 확장자는 .lib이지만 리눅스에서

nicewoong.github.io

 

반응형

'42seoul' 카테고리의 다른 글

[get_next_line] 메모리 구조  (0) 2020.11.24

+ Recent posts