-
라이브러리와 링크, 그리고 적시컴파일프로그래밍언어론 2023. 3. 6. 17:38
라이브러리와 링크
링크 C는 컴파일 결과가 소스파일 단위로 Obejct코드를 생성하고 이를 실행가능한 프로그램인 exe로 합쳐야 OS에 의해 실행가능해진다.
개별 소스 파일이 컴파일되면 다른 소스를 참조하는 변수, 함수호출은 비어있고, 이 상태로어셈블리 코드가 생성된다.링커는 이런 오브젝트 코드간 연결을 해준다.
또한 소스프로그램에서 호출한 라이브러리 함수를 찾아서 하나의 exe프로그램 안에 합쳐주기도 한다.
즉 헤더파일의 라이브러리 함수 코드들은 링크 단계에서 exe파일에 합쳐져서 호출되면 그 코드 부분으로 이동할 수 있게 말들어져야 실행가능해진다.모든 exe마다 라이브 러리를 모두 따로 가지면 메모리를 너무 많이 차지하는 문제가 생길 수 있다.
ex) MFC, GUI
이 경우 링커는 찾아서 확인만 하고 로더가 exe를 메모리로 올릴 때 공통 라이브러리 파일을 찾아 연결해주는 역할을 한다.
이를 윈도우에서는 DynamicLinkedLibrary (DLL)이라고 한다.전처리
많은 컴파일러는 기계어 대신 어셈블리어를 생성하고, 어셈블러가 이를 기계어 코드로 변경시킨다.
C를 위한 컴파일러는 주석을 제거 하고 메크로를 확장하는 전처리기로 시작한다.
동일한 소스로 다양한 버전을 만들어주는 매트로의 조건 컴파일을 이용해서 전처리기가 코드의 일부를 삭제하게 처리할 수 있다.C++ 구현은 어셈블리어 대신 C로 작성된 중간 프로그램을 생성했다.
C++컴파일러는 컴파일의 두번째 단계를 오류없이 통과할 수 있는 코드를 생성하고 C컴파일러를 호출하게 된다. 이런 종류의 C++컴파일러를 언어 변환기라고 부르는데, 코들린이나 GO를 자바로 , 타입스크립트를 JS로 변환하는 예로도 많이 사용된다.적시 컴파일
중간 코드를 해석 형태로 실행하는 언어는 네이티브 코드를 이용한 실행환경(C) 보다 성능이 좋지 않다.
그러나 자바는 바이트코드를 VM이용한 프로그램이 담당하게 되고 VM이 프로그램을 실행시키는 역할도 한다.
자바 프로그램의 한계를 극복하기 위해 닷넷 환경은 다른 방식을 취한다.CIL이라는 중간 코드로 된 프로그램이 실행되지 않고, 실행직전에 네이티브 코드로 다시 컴파일된다. 이를 적시컴파일 이라고 한다.
닷넷환경은 적시컴파일된 네이티브 코드 보전, 중간 코드버전 모두를 관리하고 어느것이 컴파일 된것인지, 또는 되어야 하는지 구별할 수 있다.728x90'프로그래밍언어론' 카테고리의 다른 글
바인딩 (0) 2023.03.11 컴파일러 구조(~후단부) (0) 2023.03.11 컴파일러의 구조(~ 전단부) (0) 2023.03.08 컴파일러와 인터프리터 (0) 2023.03.06 언어론 (0) 2023.03.06