컴파일 과정은 모든 C++ 코딩 프로젝트에서 빼놓을 수 없는 핵심 단계입니다. 따라서 효율적이면서도 간단하게 사용할 수 있고, 다양한 기능까지 갖춘 컴파일러가 필요합니다. 바로 이 지점에서 g++ 컴파일러가 큰 힘을 발휘합니다. g++은 명령줄에서 바로 실행 가능한 다양한 컴파일 기능을 제공하며, 이 글에서는 이 강력한 도구를 시작하는 방법을 단계별로 안내합니다.
g++이란 무엇인가?
g++은 명령줄(터미널)에서 실행되는 C++ 컴파일러라고 설명하는 것이 가장 정확합니다. 자유소프트웨어재단(Free Software Foundation)에서 배포했으며, GCC(GNU Compiler Collection)의 일부입니다. g++은 고급 프로그래밍 언어(여기서는 C++)로 작성된 코드를 컴퓨터가 이해할 수 있는 저수준 언어로 변환하여 실행 파일로 만들어 줍니다.
설치 방법
대부분의 리눅스 배포판에는 g++이 기본적으로 설치되어 있습니다. 하지만 사용 중인 배포판에 설치되어 있지 않다면, 아래 안내에 따라 주요 리눅스 배포판에 설치하는 방법을 확인해 보세요.
우분투(Ubuntu)와 데비안(Debian)에서는 apt 패키지 관리자를 사용해 설치합니다:
sudo apt update && sudo apt install g++
페도라(Fedora)와 CentOS에서는 yum 패키지 관리자를 사용합니다:
sudo yum install g++
또한 pkgs.org에서 패키지 파일을 직접 다운로드할 수도 있습니다. Curl 도구를 활용하는 방법은 다음과 같습니다:
sudo curl https://ftp.de.debian.org/debian/pool/main/g/gcc-defaults/g++_10.2.1-1_amd64.deb -O
다운로드한 패키지는 dpkg 유틸리티로 설치할 수 있습니다:
sudo dpkg -i g++.deb
g++이 제대로 설치되었는지 확인하려면 --version 플래그를 사용하세요:
g++ --version
기본 사용법
설치가 완료되었다면 이제 본격적으로 g++을 사용해 코드를 컴파일할 차례입니다.
먼저 --help 플래그를 사용하면 매뉴얼을 확인할 수 있어 유용합니다:
g++ --help
컴파일러와 설정에 대한 추가 정보가 필요할 때가 있습니다. --dumpspecs 플래그를 사용하면 컴파일러에 내장된 스펙 문자열(spec strings)을 출력할 수 있습니다:
g++ --dumpspecs
이 명령을 통해 컴파일러의 기능과 다양한 옵션을 한눈에 파악할 수 있습니다.
g++으로 기본적인 컴파일을 수행하려면 다음 형식을 사용합니다:
g++ [파일명]
예를 들어 "main.cpp"라는 파일이 있다면 아래와 같이 입력하여 컴파일할 수 있습니다:
g++ main.cpp
컴파일된 실행 파일은 기본적으로 "a.out"이라는 이름으로 생성됩니다. 다음 명령으로 실행할 수 있습니다:
./a.out
실행 파일의 이름을 직접 지정하고 싶다면 -o 플래그를 사용하세요:
g++ -o [생성할 이름] [컴파일할 파일]
실행 파일 이름을 "main"으로 지정하고 싶다면 다음과 같이 입력합니다:
g++ -o main main.cpp
여러 오브젝트 파일을 하나로 링크(link)해야 하는 경우에는 다음 형식을 사용합니다:
g++ -o [결과 파일] [obj1.o] [obj2.o]
예를 들어 "object-1.o"와 "object-2.o"라는 오브젝트 파일을 "main"이라는 실행 파일로 합치려면 다음과 같이 입력합니다:
g++ -o main object-1.o object-2.o
라이브러리와 헤더 파일이 위치한 루트 디렉터리를 지정하려면 --sysroot 플래그를 사용하세요:
g++ -o [이름] --sysroot [디렉터리] main.cpp
"-Wall" 옵션으로 경고 메시지 표시하기
코드를 컴파일할 때 모든 경고 메시지를 확인하면 디버깅에 큰 도움이 됩니다. 다행히 g++에는 이 기능이 기본으로 내장되어 있어 바로 사용할 수 있습니다.
모든 경고 메시지를 표시하려면 -Wall 플래그를 사용하세요(대문자 "W"임에 주의하세요):
g++ -o main main.cpp -Wall
정적 라이브러리 만들기
라이브러리 제작은 적합한 코드 에디터를 고르는 것만큼이나 소프트웨어 개발에서 중요한 부분입니다. ar 명령 같은 몇 가지 요령만 익히면 g++을 사용해 손쉽게 라이브러리를 만들 수 있습니다.
먼저 오브젝트 파일을 컴파일합니다:
g++ -o obj.o main.cpp
다음으로 ar 유틸리티에 "rcs" 옵션을 붙여 아카이브(".a") 파일을 생성합니다:
ar rcs archive.a obj.o
마지막으로 생성한 라이브러리를 g++과 함께 사용합니다:
g++ -o final example.cpp archive.a
자주 묻는 질문(FAQ)
1. 이 도구로 .c 파일도 컴파일할 수 있나요?
기술적으로는 가능합니다. 다만 g++은 본래 C++ 전용 컴파일러이므로, .c 파일 컴파일에는 gcc 유틸리티가 더 적합합니다. 또한 g++은 .c 파일을 어차피 C++ 파일로 취급한다는 점도 유의해야 합니다.
그래도 g++으로 .c 파일을 컴파일하고 싶다면 -c 플래그를 사용하면 됩니다:
g++ -c [example.c] -o example
2. 굳이 gcc 대신 g++을 사용해야 하는 이유가 있나요?
gcc 역시 C++ 컴파일러로 충분히 사용할 수 있습니다. 하지만 g++은 사실상 gcc를 C++에 맞게 조정한 버전으로, C++ 코드를 다루는 프로그래머에게 더 적합한 추가 기능과 특성을 제공합니다.
3. 최신 버전은 무엇인가요?
2022년 1분기 기준 g++의 최신 버전은 11.2.0이며, 2021년 7월에 출시되었습니다. 참고로 GCC는 꾸준히 업데이트되고 있으므로, 최신 릴리스 정보는 GNU 공식 웹사이트에서 확인하는 것이 좋습니다.