처음부터 차근차근

라이브러리와 아카이브, 에러 처리 본문

Linux & Unix

라이브러리와 아카이브, 에러 처리

_soyoung 2022. 3. 1. 19:06
반응형

라이브러리 

라이브러리란 소프트웨어를 개발할 때 컴퓨터 프로그램이 사용하는 비휘발성 자원의 모임이다.

프로그램 기능이 다양해짐에 따라 개발 자원이 증가되어 동일 유형의 기능에 대한 코드 공유 및 재활용 필요해졌고,

공유할 자료들을 별도로 관리하는 것을 라이브러리(library)화라고 한다.

 

 

라이브러리의 종류

  • 정적 라이브러리(static library)
  • 공유 라이브러리(shared library)

 

정적 라이브러리

정적 링킹(Static Linking) 과정에서 링커가 프로그램에 필요로 하는 부분을 라이브러리에서 찾아 실행 파일에 복사하는 방식의 라이브러리를 의미한다.

그래서 메모리 내에 코드가 중복될 수 있다.

 

장점 : 이식성이 좋고 안정적이다.

왜냐하면 실행 파일이 정적 라이브러리를 복사해서 가지고 있으므로 실행 파일만 있으면 프로그램이 동작하기 때문이다.

 

단점 : 라이브러리에서 수정할 부분이 있으면 파일 전체를 다시 컴파일하여 재배포해야 한다.(실행 파일이 라이브러리 내용을 복사해서 가지고 있어서)

실행 파일 크기가 커진다.

코드가 중복되어 메모리 자원을 낭비한다.

 

동적 라이브러리(공유 라이브러리)

프로세스들이 공동으로 사용하는 라이브러리이다.

동적 링킹(Dynamic Linking) 과정에서 링커가 라이브러리 내용을 복사하지 않고 해당 내용의 주소만 가지고 있다가 런타임에 실행 파일과 라이브러리가 메모리에 위치할 때 해당 주소로 가서 필요한 내용을 가져오는 방식의 라이브러리를 의미한다.

그래서 메모리 공간에 하나만 존재하며

공유 코드에 문제가 생기면 연계된 모든 프로세스에게 영향을 준다.

 

장점 : 정적 라이브러리를 사용하는 것보다 실행 파일 크기가 작아진다.

동적 라이브러리를 메모리에 올려놓고 공유해서 사용하기 때문에 메모리 자원을 효율적으로 사용할 수 있다.

라이브러리에서 수정할 부분이 있으면 실행 파일을 새로 컴파일할 필요 없이 동적 라이브러리만 다시 컴파일하여 재배포할 수 있다.

 

단점 : 외부 의존도가 생기며 이식성이 낮다.

왜냐하면 동적 라이브러리가 제대로 링크되어 있지 않거나 버전이 맞지 않는 등의 문제가 있으면 실행이 안 될 수 있기 때문이다.

 

 

실습 - 라이브러리 구현

min.h
min_main.c
min.c

 

정적 라이브러리 생성

 

동적 라이브러리 생성

 

 

 

아카이브

아카이브란 여러 개의 파일을 묶어서 보관하는 기록 보관소(archive)이다.

용량을 줄이기 위해 압축을 하기도 한다. ex) .zip

정적 라이브러리의 대표적인 예이다.

 

아카이브 파일 만드는 명령어 

ar [옵션] [아카이브파일] [대상파일들]

대상파일들을 아카이브 파일에 추가하거나 제거한다.

 

대표적인 옵션

r : 아카이브 파일에 대상 파일 추가

d : 아카이브 파일에서 대상 파일 삭제

p : 아카이브 파일들의 내용(텍스트파일)을 출력

pv : 파일명도 함께 아카이브 파일들의 내용 출력

x : 아카이브 파일에서 대상 파일을 빼기

 

실습

아카이브 파일에 .conf 파일 추가
실행 결과
아카이브 파일 내용보기
실행결과
아카이브 파일에서 대상 파일을 빼기
실행결과

 

 

에러 처리

소프트웨어의 안정성을 위해서는 에러를 정의하고 처리해야한다.

관련 에러 코드는 errno.h에 정의되어있다.

그래서 코드 상단에 include해서 사용하면 된다.

 

 

실습

errno.c

errno는 에러의 상태를 기록하기 위해 만든 변수이다.

5에 해당하는 에러가 출력된다.

 

 

 

 

 

출처 : 운영체제(21-1학기)김병국교수 강의 내용 변형 및 요약

참고 : https://bradbury.tistory.com/224

반응형
Comments