리눅스 c++ 명령어 완전 정복: g++ 차이부터 실전 컴파일 가이드

개요

리눅스 터미널에서 제공하는 c++ 명령어의 정체와 시스템 내 동작 원리를 파악합니다. g++과의 차이점을 이해하고, 실제 예제 코드를 직접 컴파일하고 실행하는 실무 필수 과정을 다룹니다.

C++ 컴파일 환경 구축 및 c++ 명령어 버전 확인

Ubuntu 환경에서 C++ 컴파일에 필요한 기본 개발 도구들을 설치하기 위해 apt-get update -qq && apt-get install -y build-essential 명령어를 실행합니다.

apt-get update -qq && apt-get install -y build-essential

which c++ 명령어는 시스템 내에 위치한 c++ 컴파일러 실행 파일의 전체 경로를 확인합니다.

which c++

c++ --version 명령어는 현재 시스템에 설치된 C++ 컴파일러의 세부 버전과 빌드 정보를 확인합니다.
⚙️ [주요 옵션]

-o <file> : 컴파일 결과로 생성할 실행 파일의 이름을 지정합니다.
-c : 링크 과정을 건너뛰고 소스 코드를 오브젝트 파일(.o)로만 컴파일합니다.
-Wall : 코드의 잠재적인 오류를 감지할 수 있도록 권장 경고 메시지를 모두 활성화합니다.
-O2 : 실행 성능과 바이너리 크기를 고려하여 코드를 최적화합니다.
-std=<standard> : 사용할 C++ 언어 표준 규약(예: c++17, c++20)을 명시적으로 설정합니다.
-g : 디버거를 통한 코드 분석이 가능하도록 디버깅 심볼을 바이너리에 포함합니다.

c++ –version

/usr/bin/c++ 심볼릭 링크 구조와 g++의 관계 확인

ls -l /usr/bin/c++ 명령어는 /usr/bin/c++ 파일의 상세 정보를 조회하여 심볼릭 링크 연결 상태와 파일 속성을 확인합니다.
이를 통해 c++ 명령어가 가리키는 대상 링크 경로를 파악할 수 있습니다.

ls -l /usr/bin/c++

update-alternatives --display c++ 2>/dev/null || readlink -f /usr/bin/c++ 명령어는 update-alternatives 관리 상태를 확인하거나 심볼릭 링크의 원본 대상을 끝까지 추적합니다.
이를 통해 c++ 명령어를 실행했을 때 실제로 동작하는 최종 컴파일러 바이너리의 절대 경로를 확인합니다.

update-alternatives –display c++ 2>/dev/null || readlink -f /usr/bin/c++

기본 C++ 소스 코드 작성 및 c++ 명령어로 빌드와 실행

c++ 컴파일 실습을 진행하기 위해 기본 출력 코드가 포함된 hello.cpp 소스 파일을 생성합니다.

cat « ‘EOF’ > hello.cpp
#include 
int main() {
std::cout « “Hello from Linux c++!” « std::endl;
return 0;
}
EOF

c++ 명령어로 hello.cpp 소스 코드를 컴파일하여 코드 최적화와 경고 검사가 적용된 hello 실행 바이너리를 생성합니다.
코드에 오류나 경고 사항이 없다면 추가 출력 메시지 없이 컴파일이 성공적으로 완료됩니다.

c++ -Wall -O2 -o hello hello.cpp

생성된 hello 실행 파일을 현재 디렉터리에서 직접 실행합니다.
소스 코드에 정의된 "Hello from Linux c++!" 문자열이 터미널에 정상적으로 출력되는지 확인합니다.

./hello

C++ 최신 표준 옵션(-std=c++20) 지정 컴파일 실습

C++20 최신 표준 문법 실습을 진행하기 위해 std::string_view와 constexpr 키워드가 포함된 modern.cpp 소스 파일을 생성합니다.

cat « ‘EOF’ > modern.cpp
#include 
#include <string_view>
int main() {
constexpr std::string_view msg = “Modern C++20 on Ubuntu”;
std::cout « msg « std::endl;
return 0;
}
EOF

c++ 명령어에 -std=c++20 옵션을 지정하여 C++20 언어 표준 규약으로 modern.cpp 소스 코드를 컴파일하고 modern 실행 파일을 생성합니다.
코드에 오류가 없다면 별도의 출력 메시지 없이 컴파일이 완료되고 실행 바이너리가 생성됩니다.

c++ -std=c++20 -o modern modern.cpp

생성된 modern 실행 파일을 실행하여 컴파일된 프로그램의 동작 결과를 확인합니다.
소스 코드에 정의된 "Modern C++20 on Ubuntu" 문자열이 터미널에 정상적으로 출력되는지 확인합니다.

./modern

지금까지 리눅스 환경에서 c++ 명령어와 g++의 차이점부터 실전 컴파일 방법까지 간단하게 정리해보았습니다.
알려드린 필수 옵션들을 직접 활용해 보시면서 자신만의 효율적인 C++ 빌드 환경을 구축해 보세요.