프로그램은 컴파일러가 컴파일 과정을 거쳐 컴퓨터가 이해할 수 있는 기계어로 번역되어 실행될 수 있는 파일이 되는 것을 의미하며 '컴파일 과정'이란 다음과 같습니다.
이는 별도의 컴파일 과정없이 한번에 한줄 씩 읽어으면서 실행하는 인터프리터 언어로 된 프로그램과는 다릅니다.
컴파일 과정
전처리
소스코드의 주석을 제거 및 헤더파일을 병합하여 매크로를 치환
컴파일러
오류처리, 코드 최적화 작업을 하며 어셈블리어로 변환
어셈플러
어셈블리어는 목적 코드로 변환됩니다.
링커
프로그램 내에 있는 라이브러리 함수 또는 다른 파일들과 목적 코드를 결합하여 실행파일을 만듭니다.
정적 라이브러리 & 동적 라이브러리
- 정적 라이브러리 : 프로그램 빌드 시 라이브러리가 제공하느 모든 코드를 실행 파일에 넣는 방식, 시스템환경 등 외부 의존도가 낮은 장점이 존재하지만 코드 중복등 메모리 효율성이 떨어지는 단점 존재
- 동적 라이브러리 : 프로그램 실행 시 필요할때만 DLL이라는 함수 정보를 통해 참조하는 방식, 메모리 효율성에서 큰 장점이 존재하나, 외부의존도가 높아지는 단점 존재한다.
https://velog.io/@narangke3/%ED%94%84%EB%A0%88%EC%9E%84%EC%9B%8C%ED%81%AC-%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC