'compile'에 해당되는 글 2건

Programming/C C++
화면에 문자열을 출력하기 위해서 다음과 같은 C Program을 작성하였습니다.

#include <stdio.h>

main()
{
  printf("hello\n");
}



이 Source를 Compile하게 되면 exe실행 File과 함께 확장자가 obj인 Object File도 같이 만들어지게 됩니다. 이 Object는 Source를 Computer가 알아들을 수 있는 기계어로 변환한 것이지만 그렇다고 실행할 수는 없습니다.

Program에서 화면에 문자열을 출력하기 위해 printf()함수를 사용하여 간단하게 처리하였는데 사실 화면에 어떠한 내용을 표시하려면 Graphic 초기화부터 시작해 매우 복잡한 과정을 거치야 합니다.

이 복잡한 과정을 Programming 할때마다 개발자가 일일이 처리해야 한다면 무척 귀찮고 힘들테지만 printf()함수를 호출하는 것만으로 쉽게 해결할 수 있었습니다.

이것이 가능한 이유는 printf()를 통해 어떠한 과정을 거쳐 표시할 것인지에 대한 정의가 stdio.h 라는 header File에 존재하기 때문입니다.(더불어 해당 함수가 정확히 쓰이도록 유도하기 위한 목적도 있습니다.)

Program에서 #include <stdio.h> 라고 되어있는 부분은 stdio.h안의 모든 내용을 해당 Source File에 포함시킨다는 뜻이지만 이걸 입력한 것만으로 끝나지 않습니다. 실제 개발자가 작성한 Source와 해당 header File을 결합하는 과정이 필요한데 그것이 바로 Link작업입니다.

결국 C Program이 Compile되는 과정은 다음과 같이 정리해 볼 수 있습니다.

4600>Source 작성 -> obj 생성 -> 표준 Library와 System호출과의 결합 -> exe 생성

여기서 System호출이라는 것은 Software가 Computer hardware나 OS(Operating System)의 자원을 효과적으로 이용할 수 있도록 해주는 것이라고 할 수 있습니다.

앞서 어떠한 내용을 화면에 표시할때에는 여러가지 과정을 거쳐야 한다고 했는데 이중에는 System호출이 필요한 경우도 있습니다. 예를 들어 화면표시, Printer 인쇄, Keyboard 또는 Mouse로 부터의 입력등등... 이 바로 그것입니다.

만일 OS에서 System호출등의 작업을 제공해 주지 않으면 개발자는 Program작성시 hardware제어부터 시작해 원하는 결과를 얻을때까지의 막대한 작업을 일일이 해주어야 하는 상당히 비효율적인 상황이 발생할 수 있습니다.

따라서 Source File은 표준 Library와 결합하고 다시 표준 Library는 경우에 따라 System호출을 통하여 원하는 동작을 수행할 필요가 있는 것입니다.
0 0
Programming/C C++
MS사의 Visual Studio 개발도구에는 C와 C++ Compile인 cl.exe Compiler가 같이 포함되어 있습니다.

해당 Compiler의 위치는 C:\Program Files\Microsoft Visual Studio 9.0\VC\bin (VS 2008기준이며 각 VS Version마다 약간씩 차이가 있을 수 있습니다.)에 위치해 있습니다.


cl.exe Compiler는 원한다면 다른 위치에서 사용해도 상관없으나 cl.exe를 이용해 C/C++ Source를 Compil하려면 환경변수라를 것을 먼저 설정해야 합니다.

환경변수 설정은 cl.exe Compiler와 함께 같이 포함되어 있는 vcvars32.bat Batch을 통해 간단히 설정할 수 있으며 이 File을 실행시켜 주기만 하면 됩니다.


특정 작업 Folder를 생성하고 그 안에서 작업하기를 원한다면 cl.exe와 vcvars32.bat File이 같이 존재해야 합니다.

다음은 간단한 Program을 작성하고 작성한 Program을 cl.exe Compiler를 이용해 Compil한 후 Program을 실행시키는 예제입니다.


1. cl.exe로 Compil시 Source File및 Object File Compil

(1) cl aaa.c
aaa.c Source File을 Compil하여 aaa.obj Object File을 만들고 생성된 obj를 Link하여 실행 File을 생성합니다.

(2) cl aaa.obj
aaa.obj Object File을 Link하여 Compile하고 실행 File을 생성합니다.

(3) cl aaa.c bbb.c
aaa.c와 bbb.c Source File을 Compil하여 각각 Object File을 만든 후 생성된 Object와 표준 Library를 Link하여 aaa.exe File을 생성합니다.

(4) cl aaa.c bbb.obj
aaa.c Source File을 Compil하여 aaa.obj를 생성한 후 생성된 obj를 bbb.obj와 Link하여 aaa.exe File을 생성합니다.

(5) cl /c aaa.c
/c Switch는 obj만 생성할 뿐 실행 File은 생성하지 않습니다.

2. cl compiler 경고 Message지정

Compil도중의 경고 Message는 compil하고 실행 File을 생성하는데는 문제는 없으나 Program이 정확히 기술되지 않는등의 문제점을 보고하는 역활을 합니다. 예들 들어

#include <stdio.h>
main()
{
  int i;
 
  printf("hello\n");
}

int 형 변수 i를 선언했지만 사용하지는 않은 Program이 있습니다. 이 Program에 대한 Compil은 문제가 없지만


경고 Message의 Level을 높여 다시 Compile하면


변수 i에 대한 경고 Message를 내뱉게 됩니다.

경고 Message의 Level지정은 /W0 부터 /W4 까지 이며 숫자가 높을 수록 좀더 철저히 Source를 검사하여 Message를 발생시킵니다.(기본값은 /W1)
0 0
1
블로그 이미지

클리엘