코딩 54일차 C/C++

마스터피스·2023년 12월 6일
0

C/ C++ 

목록 보기
26/35
post-thumbnail

C++ 컴파일에 관하여 - LNK 오류 대처하기

1) 소스파일 - 오브젝트 파일

  • 소스파일들은 컴파일 될 때 각각 소스파일 한개당 Object파일 한 개를 생성하게 됩니다.C++ 컴파일러는 이 Obj 파일을 한데 묶어 exe파일을 만들어내게 됩니다.

  • C++은 컴파일은 cpp 파일을 가지고 한다.
  • 헤더파일을 가지고 cpp 파일에서 obj로 만든다.
  • obj 는 실행파일로 만들기 직전에 만드는 파일이다.
  • 테트리스 소스코드는 이와 같은 형태로 이루어져 있습니다.

  • 위와 같이 해서 exe 파일이 만들어진다.
  • LINK 에러는 여러개의 동일한 함수가 여러개가 있으면 나는 에러이다.
  • 매크로(전처리)는 각각의 소스파일 하나에만 적용이 됩니다. 즉 소스파일이 다르면 매크로는 동작하지 않습니다. 대표적인것이 ifdef, ifndef, define 매크로가 되겠습니다.

2) 매크로의 컴파일

  • 이렇게 헤더파일들을 각각의 소스파일에서 모두 다 포함시키고 오브젝트파일을 만들어내게 되는데
    이 오브젝트 파일은 중간단계 파일로서 실행 파일로 가기 직전의 실행 파일이라고 생각하면 됩니다.

  • 이렇게 만들어진 obj 파일들은 서로 합쳐져서 exe 파일로 만들어지게 됩니다. 이 파일을 이용해 우리는 프로그램을 실행할 수 있게 됩니다.

  • 이렇게 obj -> 실행 파일을 만들 때 함수의 선언을 실제 몸체와 연결시키는 작업을 하는데 이것을 링킹이라고 합니다. 이것은 함수의 정의(몸통)으로부터 선언을 찾아가는 것이 아닌 함수의 선언 으로부터 몸통을 하나하나 찾아가는 과정이 됩니다.(이 과정 때문에 C++의 컴파일은 속 터지게 느립니다)

*더 알아보기

시그니처란 컴파일러상에서의 함수의 식별자라고 생각하시면 됩니다.

  • 에러발생 시 에러 그대로 영문으로 검색한다.
  • 실제 코드를 보고 예시를 봅니다 이 예시를 통해 컴파일이 어떻게 이루어지는지 확인할 수 있습니다.
profile
코딩 일지

0개의 댓글