Turbo-C
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
터보-C 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
Lua 게시판
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C/C++ Q/A
[3173] Re:울트라에디터와 TC 2.1 과 연동 하다가 궁금증 생겨서 질문드립니다.
Starlet [starlet5] 2020 읽음    2004-01-13 20:35
에디트 플러스에 대해서는 제가 답변을 못드리겠습니다. 제가 사용을 안해봐서...
컴파일과 링크에 대해 설명을 드리면, 컴파일은 C또는 C++로 된 코드를 기계어로 바꾸는 것입니다.
a = a+1; 과 같은 경우 컴파일러는

mov ax, word ptr [a주소] <- a값을 ax레지스터(레지스터는 CPU의 특별한 저장공간입니다.)에 넣은 후
inc ax                   <- ax를 1 증가 시킴...

이런식으로 사람이 이해하기 쉽게 쓴 코드를 컴퓨터가 처리할 수 있도록 기계어로 바꿔줍니다. 여기서 extern 등으로 선언된 다른 라이브러리에 있는 함수나 값등은 그 함수 이름으로 임시로 지정됩니다. 컴파일 된 결과는 tcc -S test.c 로 하면 test.asm이 생성되어 볼수 있습니다. 어셈블리 코드로 되어있고 외부에서 참조하는 함수는 함수앞에 _ 언더바가 붙어 그 이름만 나타나 있을것입니다.
링크는 이렇게 컴파일해서 생성된 obj파일을 다른 필요한 라이브러리와 묶어 실행가능한 파일로 만드는 일입니다. 외부에서 참조하는 함수는 그 함수 주소로 대체되고 실행될 수 있도록 각 운영체제가 정한 형식의 헤더가 파일 앞에 붙을 것입니다.
간단히 다음의 코드를 Turbo C에서 도스용 EXE를 만든다하면...

#include <stdio.h>

void main(void)
{
    printf("Hello!");
}

컴파일러는 위 코드를 기계어로 바꿉니다. 먼저 메모리와 관련된 설정내용이 붙으며 main 함수를 call 해주는 명령이 들어갈것입니다. 그리고 printf를 수행하기 위해 Hello!의 위치를 스택에 넣으며 printf 함수를 call 해주는 코드가 들어갑니다.
이렇게 만들어진 기계어로 된 obj 파일은 이제 실행가능한 파일로 바꾸기 위해 링크 과정에 들어갑니다.
제일 앞에 도스용 EXE파일 헤더(코드세그먼트, 데이터세그먼트 등의 실행하는데 필요한 정보가 기록됩니다.)가 제일 앞에 기록되며 컴파일해서 생성된 기계어 코드가 들어갑니다. 그런데 여기서 printf는 라이브러리로 c0s.obj와 같은 파일에 이미 컴파일되어 들어있습니다.(lib 폴더에 보시면 각 메모리 모델별로 c0s.obj, c0m.obj 등이 있을것입니다.) 그러면 _printf로 외부 함수라고 지정된 곳에 c0s.obj에서 printf를 찾아 그 위치로 대체해 줍니다. 물론 c0s.obj 파일도 printf의 실제 코드를 가지고 있으므로 링크시에 합쳐지겠죠?
이렇게 실행파일이 만들어지는 것입니다.
이해가 되셨길 바라며 tcc -S test.c 는 꼭 해보시면 도움이 많이 되실겁니다.
그럼 이만...

김민기 님이 쓰신 글 :
:  3.1과 씨름하다가 밑에 게시물보고 에디트플러스와 5.5 컴파일러(?)와 연동하는거 보고 따라해볼려고 하다가 울트라에 정이 들어서 울트라로 시도 해서 연동 성공하였습니다.
:
: 궁금한 사항은
:
: 에디터 플러스에 보면
:
: compile
: C:\Borland\BCC55\Bin\bcc32.exe
: -v -IC:\Borland\BCC55\include -v -LC:\Borland\BCC55\lib -n"$(FileDir)" "$(FilePath)"
: C:\Borland\BCC55\bin
:
: 이런 설정에서 . -n"$(FileDir)" "$(FilePath)"   <- 이것은 에디트 플러스에만 해당되는 설정인가요?
:
: 제가 울트라에서 계속 이걸로 고민하다가 () 안에 filedir 이 경로인줄알고 경로 써주고 해봣는데 안되더군요. 울트라에디터 도움말을 보다가 -n"$(FileDir)" "$(FilePath)"  줄을 다 지우고
: %F 라는 걸 해줬는데 되더군요.
:
: -n"$(FileDir)" "$(FilePath)" 의 정체를 알고싶습니다.
:
:
:
: 두번째 질문은 컴파일과 링크의 정의에 대해서 알고싶습니다.
:
:

+ -

관련 글 리스트
3169 울트라에디터와 TC 2.1 과 연동 하다가 궁금증 생겨서 질문드립니다. 김민기 1977 2004/01/13
3173     Re:울트라에디터와 TC 2.1 과 연동 하다가 궁금증 생겨서 질문드립니다. Starlet 2020 2004/01/13
4338         Re:Re:울트라에디터와 TC 2.1 과 연동 하다가 궁금증 생겨서 질문드립니다. 김민기 1500 2004/01/14
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.