HOWTO · C++
GCC를 사용하여 C++ 프로그램 컴파일
이 기사에서는 gcc 컴파일러를 사용하여 C++ 프로그램을 컴파일하는 방법에 대해 설명합니다.
이 페이지의 내용
GCC로 C++ 소스 파일을 컴파일하고 실행하려면 g++ 컴파일러 드라이버를 사용하세요. g++ -o hello hello.cpp를 실행한 다음 Linux 또는 macOS에서 ./hello를 실행하면 됩니다. GCC는 GNU Compiler Collection이며, g++는 일반적인 프로그램에 C++ 표준 라이브러리를 연결하는 동작을 포함해 C++ 빌드에 맞는 처리를 선택합니다. 아래에서는 컴파일러 사용 가능 여부 확인, 첫 프로그램 작성, 자주 보는 진단 메시지, 간단한 여러 파일 빌드를 살펴봅니다.
GCC와 그 중요성 이해하기
GCC는 여러 언어용 드라이버를 포함한 컴파일러 모음입니다. C++ 작업에는 보통 g++ 드라이버를 사용하는 것이 가장 간단합니다. 빌드는 소스 코드를 변환하고, 생성된 오브젝트 코드와 필요한 라이브러리를 연결해 실행 파일을 만듭니다. 한 번의 명령으로 두 단계를 모두 수행할 수 있으며, 규모가 큰 프로젝트에서는 파일을 각각 컴파일한 다음 연결하기도 합니다.
gcc 드라이버로도 C++ 소스를 컴파일할 수 있지만, g++와 달리 C++ 표준 라이브러리를 같은 방식으로 자동 연결하지는 않습니다. GNU/Linux 도구 체인에서는 gcc에 -lstdc++를 지정해 해당 라이브러리를 명시적으로 요청할 수 있습니다. 라이브러리 순서와 플랫폼 세부 사항이 중요할 수 있으므로, 일반적인 C++ 빌드에는 g++를 사용하세요. 소스 파일에는 흔히 .cpp 또는 .cc 확장자를 사용합니다. 대소문자를 구분하는 시스템에서는 대문자 .C 확장자도 GCC가 C++ 파일로 처리합니다.
GCC 설치하기
먼저 터미널에서 g++ --version을 실행해 C++ 컴파일러를 사용할 수 있는지 확인하세요. 컴파일러가 있으면 설치된 버전이 표시됩니다. 명령을 사용할 수 없다면 운영체제의 패키지 관리자를 이용하거나 해당 시스템에서 권장하는 도구 체인을 설치하세요. 패키지 이름과 설치 방법은 시스템마다 다릅니다. Ubuntu 및 일부 관련 배포판에서는 build-essential 패키지에 GCC와 다른 빌드 도구가 포함됩니다. Windows에서는 MinGW-w64와 같은 GCC 도구 체인을 설치하고 해당 bin 디렉터리를 PATH에서 사용할 수 있게 설정하거나, 지원되는 다른 C++ 도구 체인을 사용할 수 있습니다. 오래된 예시의 버전 번호에 의존하지 말고 배포판이나 도구 체인의 최신 안내를 따르세요.
첫 번째 C++ 프로그램 작성하기
작업 디렉터리에 hello.cpp라는 파일을 만드세요. 이 프로그램은 표준 출력에 한 줄을 씁니다.
다음 예제를 실행하세요.
#include <iostream>
int main() {
std::cout << "Hello, World!\n";
return 0;
}
Hello, World!
#include <iostream>은 std::cout에서 사용하는 스트림 선언을 제공합니다. main 함수는 프로그램의 진입점이며, \n은 출력되는 줄을 끝냅니다.
C++ 프로그램 컴파일하기
hello.cpp가 있는 디렉터리에서 g++ -o hello hello.cpp를 실행하면 프로그램을 컴파일하고 실행 파일의 이름을 지정할 수 있습니다. -o 옵션은 출력 이름을 지정합니다. 이 옵션을 생략하면 Unix 계열 시스템에서는 GCC가 a.out 같은 기본 이름을 사용하는 경우가 많습니다. 결과물은 오브젝트 파일이 아니라 실행 파일입니다. Linux 또는 macOS에서는 ./hello로 실행하세요. Windows 명령 프롬프트에서는 보통 현재 디렉터리의 hello.exe를 실행하지만, 정확한 실행 방법은 셸과 도구 체인에 따라 다릅니다.
GNU/Linux를 기준으로 한 대안으로 gcc -o hello hello.cpp -lstdc++를 사용하면 C++ 표준 라이브러리를 명시적으로 요청할 수 있습니다. 빌드 시스템에서 gcc 드라이버를 요구할 때 유용할 수 있지만, 일반적인 C++ 프로그램에는 적절한 C++ 연결 동작을 자동으로 선택하는 g++를 사용하는 편이 좋습니다.
컴파일 오류 디버깅하기
진단 메시지는 왼쪽에서 오른쪽으로 읽으세요. 먼저 소스 파일과 줄을 알려 준 다음 문제를 설명합니다. 예를 들어 프로그램에서 <iostream>을 포함하지 않거나 std::cout처럼 이름을 지정하지 않은 채 cout을 사용하면, cout이 선언되지 않았다는 진단 메시지가 나올 수 있습니다. 누락된 헤더를 추가하고 std::cout을 사용한 뒤 다시 빌드하세요. 메시지의 정확한 문구와 줄 번호는 컴파일러 버전과 소스 코드 배치에 따라 달라집니다.
g++ -Wall -o hello hello.cpp로 GCC에서 일반적인 경고를 활성화할 수 있습니다. -Wall은 유용한 출발점이지만 GCC가 제공하는 모든 경고를 켜지는 않습니다. 경고는 의심스러운 코드를 알려 줄 수 있는 진단 메시지입니다. 내용을 검토한 뒤 코드나 빌드 옵션을 바꿀지 결정하세요.
여러 파일 연결하기
한 소스 파일에서 함수를 정의하고 다른 파일에서 호출할 수 있습니다. 예를 들어 main.cpp에서 <iostream>을 포함하고 int add(int, int);를 선언한 다음 int main() { std::cout << add(2, 3) << '\n'; }를 정의할 수 있습니다. functions.cpp에는 int add(int a, int b) { return a + b; }를 정의합니다. 선언과 정의가 서로 일치하면 컴파일러가 함수 호출을 확인하고 링커가 호출을 구현에 연결할 수 있습니다.
두 소스 파일을 하나의 명령으로 빌드하려면 g++ -o my_program main.cpp functions.cpp를 실행하세요. 이 명령은 각 소스 파일을 컴파일한 다음 연결해 my_program 실행 파일을 만듭니다. Linux 또는 macOS에서는 ./my_program으로 실행하며, 예제는 5를 출력합니다. Windows에서는 셸이 지원하는 방식으로 생성된 my_program.exe를 실행하세요.
결론
일반적인 GCC 기반 C++ 빌드에는 g++ -o program source.cpp를 사용한 뒤 해당 명령으로 생성된 실행 파일을 실행하세요. gcc 드라이버로도 C++를 컴파일할 수 있지만, GNU/Linux 빌드에서는 -lstdc++를 명시적으로 추가해야 할 수 있습니다. 보통은 g++를 선택하면 이 라이브러리 옵션을 따로 지정하지 않아도 됩니다.
자주 묻는 질문
- GCC란 무엇인가요? GCC는 GNU Compiler Collection의 약자로, C++, C 및 다른 언어용 컴파일러 드라이버를 제공합니다.
- GCC가 설치되어 있는지 어떻게 확인하나요? C++ 드라이버를 확인하려면
g++ --version을, C 드라이버를 확인하려면gcc --version을 실행하세요. - C++에
gcc대신g++를 사용하는 이유는 무엇인가요?g++는 일반적인 프로그램에 필요한 표준 라이브러리를 포함해 C++ 연결 동작을 자동으로 선택합니다.gcc를 사용할 경우 GNU/Linux 빌드에서는-lstdc++를 명시해야 할 수 있습니다. - 한 명령으로 여러 C++ 파일을 컴파일할 수 있나요? 네.
g++명령에 각 소스 파일을 나열하면 됩니다. 예를 들어g++ -o my_program main.cpp functions.cpp를 사용할 수 있습니다. -o는 어떤 역할을 하나요? 출력 파일의 이름을 지정합니다.g++ -o hello hello.cpp처럼 전체 빌드 명령을 사용하면 출력 파일은 실행 파일입니다.