본문 바로가기

C++ (learncpp)/Introduction - Getting Started

0.5 — Introduction to the compiler, linker, and libraries

이전 강의(0.4 -- C++ 개발 소개)에서 이 다이어그램에 대한 논의를 계속합니다.

 

 

 

Step 4: 소스코드 컴파일 (Compiling your source code)

C++ 프로그램을 컴파일하기 위해 우리는 C++ 컴파일러를 사용합니다. C++ 컴파일러는 프로그램의 각 소스 코드(.cpp) 파일을 순차적으로 살펴보고 두 가지 중요한 작업을 수행합니다.

먼저 코드가 C++ 언어의 규칙을 따르는지 확인합니다. 그렇지 않은 경우 컴파일러는 수정이 필요한 부분을 정확히 찾아내는 데 도움이 되도록 오류(및 해당 줄 번호)를 제공합니다. 오류가 수정될 때까지 컴파일 프로세스도 중단됩니다.

둘째, C++ 소스 코드를 객체 파일이라는 기계어 파일로 변환합니다. 개체 파일의 name은 일반적으로 name.o 또는 name.obj로 지정됩니다. 여기서 name은 생성된 .cpp 파일과 동일한 이름입니다.

프로그램에 3개의 .cpp 파일이 있는 경우 컴파일러는 3개의 개체 파일을 생성합니다.

 

 

C++ 컴파일러는 다양한 운영 체제에서 사용할 수 있습니다. 우리는 곧 컴파일러 설치에 대해 논의할 것이므로 지금은 그렇게 할 필요가 없습니다.

 

Step 5: 객체 파일과 라이브러리 링크 (Linking object files and libraries)

컴파일러가 하나 이상의 개체 파일을 만든 후 링커라는 다른 프로그램이 시작됩니다. 링커의 작업은 세 가지입니다.

첫째, 컴파일러에서 생성된 모든 개체 파일을 가져와 단일 실행 프로그램으로 결합합니다.

 

 

둘째, 링커는 개체 파일을 연결할 수 있을 뿐만 아니라 라이브러리 파일도 연결할 수 있습니다. 라이브러리 파일은 다른 프로그램에서 재사용하기 위해 "패키지"된 미리 컴파일된 코드 모음입니다.

C++ 핵심 언어는 실제로 상당히 작고 간결합니다(이 튜토리얼에서 많은 것을 배울 것입니다). 그러나 C++에는 프로그램에서 사용할 수 있는 추가 기능을 제공하는 C++ 표준 라이브러리(일반적으로 표준 라이브러리로 축약됨)라는 광범위한 라이브러리도 함께 제공됩니다. C++ 표준 라이브러리에서 가장 일반적으로 사용되는 부분 중 하나는 모니터에 텍스트를 인쇄하고 사용자로부터 키보드 입력을 받는 기능을 포함하는 iostream 라이브러리입니다. 작성된 거의 모든 C++ 프로그램은 어떤 형태로든 표준 라이브러리를 활용하므로 표준 라이브러리가 프로그램에 연결되는 것은 매우 일반적입니다. 대부분의 링커는 표준 라이브러리의 일부를 사용하자마자 자동으로 표준 라이브러리에 연결되므로 일반적으로 걱정할 필요가 없습니다.

 

선택적으로 다른 라이브러리에 연결할 수도 있습니다. 예를 들어, 사운드를 재생하는 프로그램을 작성하려는 경우 디스크에서 사운드 파일을 읽거나, 유효한지 확인하거나, 사운드 데이터를 라우팅하는 방법을 알아내기 위해 자신의 코드를 작성하고 싶지 않을 것입니다. 운영 체제나 하드웨어에 연결하여 스피커를 통해 재생하려면 많은 작업이 필요합니다! 대신에 이미 그러한 작업을 수행하는 방법을 알고 있는 라이브러리를 다운로드하여 사용할 수 있습니다. 부록에서 라이브러리에 링크하는 방법(그리고 직접 만드는 방법)에 대해 이야기할 것입니다.

셋째, 링커는 모든 파일 간 종속성이 올바르게 해결되었는지 확인합니다. 예를 들어, 하나의 .cpp 파일에 정의한 다음 다른 .cpp 파일에서 사용하면 링커가 두 파일을 함께 연결합니다. 

 

링커가 정의가 있는 무언가에 대한 참조를 연결할 수 없으면 링커 오류가 발생하고 연결 프로세스가 중단됩니다.

링커가 모든 개체 파일과 라이브러리 연결을 마치면(모든 것이 잘 된다고 가정) 실행할 수 있는 실행 파일이 생깁니다!v

 

고급 독자용 (For advanced readers)

복잡한 프로젝트의 경우 일부 개발 환경에서는 프로그램을 빌드하는 방법(예: 컴파일 및 링크할 파일 또는 다양한 방식으로 처리할 파일)을 설명하는 파일인 makefile을 사용합니다. makefile을 작성하고 유지 관리하는 방법에 대한 전체 책이 작성되었으며 믿을 수 없을 정도로 강력한 도구가 될 수 있습니다. 그러나 makefile은 C++ 핵심 언어의 일부가 아니며 계속 진행하기 위해 사용할 필요도 없기 때문에 이 튜토리얼 시리즈의 일부로 이를 논의하지 않을 것입니다.

Steps 6 & 7: 테스트와 디버깅 (Testing and Debugging)

이것은 재미있는 부분입니다(바라건대)! 실행 파일을 실행하고 예상한 출력이 생성되는지 확인할 수 있습니다!

 

프로그램이 실행되지만 제대로 작동하지 않으면 디버깅을 통해 무엇이 잘못되었는지 알아낼 시간입니다. 곧 프로그램을 테스트하는 방법과 디버그하는 방법에 대해 논의할 것입니다.

 

통합 개발 환경(IDE)

 

3, 4, 5, 7단계에는 모두 소프트웨어(편집기, 컴파일러, 링커, 디버거)가 포함됩니다. 이러한 각 활동에 대해 별도의 프로그램을 사용할 수 있지만 통합 개발 환경(IDE)으로 알려진 소프트웨어 패키지는 이러한 모든 기능을 함께 번들로 통합합니다. IDE에 대해 논의하고 다음 섹션에서 설치합니다.

 

reference : https://www.learncpp.com/cpp-tutorial/introduction-to-the-compiler-linker-and-libraries/