일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- cording
- knockon
- 220821
- 개발공부
- html
- 홈서버
- 외부접속
- windows
- React
- 개인서버
- 정보처리기능사
- 개발
- 오답풀이
- 매크로
- 프로그래밍 언어론
- Mac
- bootcamp
- Java
- git
- C
- 자격증
- 프로그래밍언어론
- php
- plan
- Developer
- CSS
- study
- 방화벽
- WPF
- CodeIgniter
- Today
- Total
bunta의 보조기억장치
[3주차 TIL] KnockOn Bootcamp 링커 본문
💡 링커(Linker)란?
여러 개의 오브젝트 파일을 하나의 실행 파일로 연결해주는 프로그램을 말한다.
코드를 컴파일 했을 때 목적 파일이 생성되는데 이 때 이 목적 파일만으로는 프로그램을 실행할 수 없으므로 여러 개의 목적 파일들 사이의 함수 참조나 변수 참조를 연결해주는 것이 링커의 역할이다.
🔎 동적 링킹(Dynamic Linking)
프로그램 실행 시점에 필요한 라이브러리를 따로 불러오는 방식
✅ 장점
1. 파일 크기 감소
- 여러 프로그램이 같은 라이브러리를 공유하므로 실행 파일 크기가 작아짐
2. 메모리 사용 효율성
- 운영체제는 하나의 라이브러리를 여러 프로세스에서 공유하기 때문에 메모리 절약이 가능
3. 업데이트 용이
- 라이브러리 하나만 교체하면 모든 프로그램이 자동으로 최신 버전으로 패치 반영이 가능
4. 배포 용이
- 프로그램을 배포할 때 이미 시스템에 있는 표준 라이브러리를 활용하여 필요한 파일만 배포하면 됨
❌ 단점
1. 의존성 문제
- 라이브러리 버전이 맞지 않거나 누락되면 프로그램 실행이 안될 수 있음
2. 버전 불일치로 인한 오류
- 라이브러리가 업데이트 되었는데 프로그램이 예전 버전에 의존하고 있을 경우, 예상치 못한 동작이나 충돌이 발생할 수 있음
3. 실행 시간에 로딩이 필요
- 프로그램이 실행되면서 라이브러리를 불러오기 때문에 초기 실행 속도가 정적 링킹보다 느릴 수 있음
4. 보안 위험성
- 악성 코드가 라이브러리 파일을 조작해서 악용하는 경우가 있음
🔎 정적 링킹(Static Linking)
컴파일 시점에 필요한 모든 라이브러리를 실행 파일에 통합하는 방식
✅ 장점
1. 독립성 보장
- 실행 파일이 모든 필요한 코드와 리소스를 내부에 포함하고 있기 때문에 외부 라이브러리 없이도 바로 실행 가능
2. 버전 문제 없음
- 어떤 버전의 라이브러리를 사용했는지 고정된 상태이기 때문에 다른 시스템에서 라이브러리 버전이 달라도 이상 없음
3. 예측 가능한 실행 환경
- 항상 동일한 코드와 상태로 실행되므로 디버깅이나 테스트가 용이함
4. 실행 속도가 약간 빠름
- 실행 시점에 외부 라이브러리를 로딩할 필요가 없어 초기 실행 속도가 동적 링킹보다 빠름
❌ 단점
1. 파일 크기 증가
- 모든 코드가 한 파일에 포함되어야 하므로 실행 파일이 크고 무거워짐
2. 메모리 낭비
- 동일한 라이브러리가 여러 프로그램에 중복으로 포함될 수 있어 메모리 사용량이 증가할 수 있음
3. 업데이트 어려움
- 보안 패치나 기능 수정이 필요한 경우 전체 프로그램을 다시 컴파일하여 배포해야 함
4. 재사용성 감소
- 정적으로 링크된 라이브러리는 다른 프로그램과 코드를 공유할 수 없음
정적 링킹 | 동적 링킹 | |
실행 파일 크기 | 큼 | 작음 |
메모리 사용 | 비효율적 (라이브러리 중복 포함) | 효율적 (라이브러리 공유) |
실행 속도 | 빠름 (즉시 실행) | 초기 로딩 필요 |
배포 | 간단 (파일 하나로 충분) | 라이브러리 동봉 필요 |
버전 문제 | 없음 | 발생할 가능성 있음 |
업데이트 | 재컴파일 필요 | 라이브러리만 교체 |
보안 / 안정성 | 안정적 | 외부 요인에 영향을 받을 가능성 있음 |
🔎 재배치
각 오브젝트 파일들은 자신의 코드가 메모리의 어떤 부분에 로딩이 될지 모르는 상태이기 때문에 대략적인 주소를 기준으로 기계어를 만든다. 하지만 여러 파일을 합치거나 라이브러리를 넣을 때 서로 주소가 겹치면 안되기 때문에 링커를 통해 주소를 새로 할당하고 코드나 데이터 안에 있는 주소 참조들을 새 주소에 맞게 재배치 해주는 과정을 거친다.
🔎 .dll 파일과 .so 파일
.dll 파일과 .so 파일 모두 동적 라이브러리를 뜻하지만 윈도우에서는 .dll 확장자를, Linux와 Unix 에서는 .so 확장자를 사용한다.
이 파일들은 공통된 기능을 여러 프로그램에서 공유하여 재사용할 수 있도록 해주는 파일이다.
'KnockOn Bootcamp' 카테고리의 다른 글
[3주차 TIL] KnockOn Bootcamp 메모리 구조와 매핑 (0) | 2025.04.20 |
---|---|
[3주차 TIL] KnockOn Bootcamp 로더 (0) | 2025.04.19 |
[3주차 TIL] KnockOn Bootcamp 컴파일러 (0) | 2025.04.17 |
[3주차 TIL] KnockOn Bootcamp 아키텍처 (0) | 2025.04.16 |
[2주차 TIL] KnockOn Bootcamp 탐색 알고리즘 (0) | 2025.04.15 |