:objective file, library등의 binaryfile들은 relocatable file로 다른 피지컬 주소로 옮길 수 있는 것들이다. 이러한 파일들을 묶어서 하나의 excutable한 파일로 만들어주는 것이 linker이다.
:loader란 만들어진 excutable한 파일을 main memory로 loading하여 cpu로 처리할 수 있도록 하는 것을 말한다. exec()시스템 콜을 통하여 실행 시킬 수 있다.
./main을 실행하면 shell이 fork()를 통해 복제된 프로세스를 만들어내고 exec()시스템 콜로 loader가 작동하도록 하여 main 실행파일의 내용을 text segment에 덮어 씌운다.
:위에서 컴파일 과정의 링킹에서 executable파일에 묶여 linking 되고 loader에 의해서 프로세스에 쓰여지는 static library와 다르게 dynamically linked libraries는 run time에 실행되고 있는 프로세스에 필요한 부분이 부분적으로 loading되어 실행되게 된다. 이렇게 동작 할 때의 장점은 static library의 경우 모든 내용이 linking되어 메모리를 많이 차지하고 각 프로세스마다 linking이 일어나야 하는 반면에, dll의 경우 많은 프로세스가 dll을 공유하도록 만들어 메모리를 절약할 수 있다. 또한 static library의 경우 library가 linking이후에 바뀌더라도 반영되지 않으며(장점일수도 있음), 따라서 바뀐 라이브러리를 적용할 경우 새로 컴파일 해야한다.