프로그래밍/부록 3

@DLL 동적 라이브러리 만들기

컴파일, 링킹 과정을 정리하다가 동적 라이브러리를 만들어보는 예제가 있어서 만들어보고 간단히 정리해보고자 글을 쓴다. ( MSDN 연습 : 자체 동적 연결 라이브러리 만들기 및 사용 C++ 를 참고했다. ) 동적 라이브러리를 만드는 과정은 참고된 링크에 자세히 설명되어있다. 해당 동적 라이브러리 프로젝트 빌드 시, dll 파일이 생성된다. dll 파일은 '윈도우 운영체제' 에서 동적 라이브러리를 적용하기 위해 만든 파일의 확장자 명이다. 리눅스 환경에서는 .so 라는 확장자 명을 사용한다. * 동적 라이브러리 컴파일 시, 라이브러리가 프로그램 안에 내장되어지는 정적 라이브러리와는 달리, 동적 라이브러리는 프로그램 실행 후 운영체제에 부여받는 가상 메모리 위에 올려진다. 운영체제에 의해서 지정된 페이지로 ..

@C++ 링킹에 대한 이해

*링킹 ( Linking ) *Linker 는 왜 필요한 것일까 ?? => 모든 obj 파일들을 하나로 합치는 역할. => 컴파일 단계에서, TU 는 독립적으로 실행되기 때문에 합쳐졌을 때의 최종적인 위치를 모른다. 모든 obj 파일을 하나로 합치는 과정과 동시에 심볼들의 정확한 위치를 확정시키는 역할을 링킹에서 수행한다. 간단히 말해서, printf("Hello World"); 에서 printf 는 stdio.h 안에 printf 가 구현되어있다. 즉, 컴파일 단계까지는 printf 의 구현부가 어디있는지 알 수 없다. printf 를 호출한 코드 ( obj ), printf 가 정의된 코드 ( library ) 이 둘을 합치는 과정이 필요. 또한, 데이터 영역의 전역변수도 마찬가지이다. 현재 각 ob..

@C++ 컴파일 에 대한 이해

*전체적인 C++ 컴파일 과정 1. 전처리 단계 => #include, #define .... 전처리기 매크로들을 처리. 2. 컴파일 단계 => 소스파일들을 어셈블리 명령어로 변환. 3. 어셈블 단계 => 실제 기계어로 이루어진 목적 코드 (.obj) 로 변환. 4. 링킹 단계 => 목적 코드 ( obj ) 들을 하나로 모아 실행 파일 생성. *전처리 단계 1. 문자 해석하기 translation character set 2. ' \ ' 문자 해석하기 #define Test(a, b) \ {\ if(a != b)\ {\ a = b;\ }\ }; 3. 전처리 토큰들로 분리 => 소스 파일을 주석, 공백문자, 전처리 토큰 으로 분리하는 단계. 4. 전처리 실행 단계 => #include 파일 내용 복사. =..