serversim
학습시뮬레이터템플릿가격
…
…
메뉴 열기
학습↗시뮬레이터↗템플릿↗가격↗
내 Documents문서
전체 목차/1장/1.33 / 40

1.3 · 언어와 번역

링커는 흩어진 코드를 어떻게 하나로 합칠까?

다른 파일에 있는 함수를 호출하면 주소를 누가 찾아줄까요?

컴파일이 끝나도 main과 라이브러리 함수는 서로의 최종 주소를 모를 수 있습니다.

먼저 생활 비유

이름만 적힌 초대장

“민수에게 전달”이라고 적힌 편지를 우체국이 실제 주소와 연결하듯 링커가 함수 이름을 실제 위치와 연결합니다.

컴퓨터 예제로 바꾸기

main에서 add 호출하기

result = add(7, 5);

main.o에는 add가 필요하다는 표시가 있고 math.o에는 add를 제공한다는 표시가 있습니다. 링커가 둘을 연결합니다.

직접 움직여 보기1 / 5

지금 일어나는 변화

main.o

add가 필요하지만 주소는 아직 모릅니다.

번역 파이프라인main.o단계 1심벌 표단계 2math.o·라이브러리단계 3재배치단계 4실행 파일단계 5add라는 이름현재: main.o

이 그림에서 기억할 한 문장

컴파일러가 파일 하나를 번역한다면 링커는 여러 번역 조각의 이름과 주소를 해결합니다.

현재 상태

이동하는 것
add라는 이름
현재 위치
main.o
다음 위치
심벌 표

30초 확인 문제

“undefined reference to add”는 보통 어느 단계의 문제일까요?

처음 보는 용어 두 개

심벌
함수나 전역 변수처럼 연결할 때 사용하는 이름
재배치
최종 배치 위치에 맞춰 주소를 고치는 작업

이 절을 다 읽었다면

컴파일러가 파일 하나를 번역한다면 링커는 여러 번역 조각의 이름과 주소를 해결합니다.

← 이전 절

1.2 컴파일러는 어떻게 코드를 번역할까?

다음 절 →

1.4 왜 컴퓨터 과학에서는 추상화가 중요할까?