# 링커
https://jhnyang.tistory.com/40?category=815411
• 프로그램은 여러 파일로 이루어진다. 링커가 없으면 한파일에 모든 프로그램소스를 담아야할 것이다.
• 링커는 라이브러리 전체를 로드하지 않고, 필요한 부분만 로드한다.
• 링커는 목적파일을 모아 실행파일로 만든다. 즉, “대부분의 컴파일러에서, 각각의 목적 파일은 하나의 입력 소스 코드 파일의 컴파일 결과이다. 한 프로그램이 여러 개의 목적 파일로 구성될 때, 링커는 이 파일들을 하나의 통합된 실행 가능한 프로그램으로 합치고 이때 생겨나는 기호들을 해결한다 (resolve).” resolve라는건, 링커가 기호를 해석하는 행위를 말하는 듯.
# 목적파일(object file)
• c++, java 스크립트를 컴파일을 거쳐 바이너리 파일로 만든 것.
• 그냥 1:1 대응은 아니고, 소스 실행에 필요한 정보들도 포함함.
# 정적링킹 vs 동적링킹
https://jhnyang.tistory.com/42
1. 정적링킹
• 내가 짠 프로그램에, 내가 사용하는 라이브러리 함수등을 복사, 포함하여 실행파일을 만든다. dll 파일이 필요가 없고, 실행파일에 라이브러리가 들어있다.
• 따라서 실행파일의 용량이 크다.
2. 동적링킹
• 내 프로그램과 라이브러리가 별도의 프로그램으로 동작한다.
• A와 B 프로그램이 똑같은 라이브러리를 사용하면 라이브러리는 하나만 메모리에 올라간다.
• dll 파일은 라이브러리 파일이다. 즉, 내가 짠 파일이 아니다. dll에는 라이브러리가 제공하는 함수가 들어있다. 런타임에 그 함수를 이용하려면 어떻게 해야하나? 바로 내 프로그램에 stub함수들을 만들어놓는 것이다. 보통 라이브러리가 제공하는 함수와 똑같은 이름으로 함수를 만들고, 그 안은 비워놓는다. 이 stub 함수는 해당 라이브러리의 똑같은 이름의 함수로 연결된다. 즉, 메모리 포인터가 내 프로그램에서 라이브러리로 이동된다. (내 프로그램 메모리영역과 라이브러리 메모리영역은 다르다. 별개의 프로그램이라고 생각해야함)
'C++' 카테고리의 다른 글
STL - queue (0) | 2020.10.27 |
---|---|
STL - map (0) | 2020.10.27 |
STL - list (0) | 2020.10.27 |
STL - iterator (0) | 2020.10.27 |
STL - vector (0) | 2020.10.27 |