在 Linux 下编译 C++ 程序,最常用、最基础的方式是使用 g++(GNU C++ 编译器)。下面按从简单到常见场景给你说明。
大多数 Linux 发行版已自带,如果没有:
# Ubuntu / Debian
sudo apt update
sudo apt install g++
# CentOS / Rocky / Alma
sudo yum install gcc-c++
# Arch
sudo pacman -S gcc
查看版本:
g++ --version
假设有文件 hello.cpp:
#include <iostream>
using namespace std;
int main() {
cout << "Hello, Linux!" << endl;
return 0;
}
编译:
g++ hello.cpp
生成可执行文件(默认叫 a.out):
./a.out
指定输出文件名:
g++ hello.cpp -o hello
./hello
g++ hello.cpp -o hello -std=c++17 -Wall -O2
常用参数说明:
| 参数 | 作用 |
|---|---|
-o |
指定输出可执行文件名 |
-std=c++11/14/17/20 |
指定 C++ 标准 |
-Wall |
显示所有警告 |
-Wextra |
额外警告 |
-O2 |
优化编译 |
-g |
加入调试信息(gdb 用) |
假设:
main.cpp
func.cpp
func.h
方式一(直接编译):
g++ main.cpp func.cpp -o app
方式二(分步编译):
g++ -c func.cpp # 生成 func.o
g++ -c main.cpp # 生成 main.o
g++ main.o func.o -o app
Makefile 示例:
CXX = g++
CXXFLAGS = -std=c++17 -Wall -O2
app: main.o func.o
$(CXX) main.o func.o -o app
main.o: main.cpp func.h
$(CXX) -c main.cpp
func.o: func.cpp func.h
$(CXX) -c func.cpp
clean:
rm -f *.o app
使用:
make
./app
make clean
编译时加 -g:
g++ main.cpp -g -o app
gdb ./app
目录结构:
project/
├── CMakeLists.txt
├── main.cpp
CMakeLists.txt:
cmake_minimum_required(VERSION 3.10)
project(demo)
set(CMAKE_CXX_STANDARD 17)
add_executable(app main.cpp)
编译:
mkdir build
cd build
cmake ..
make
./app
❌ g++: command not found
→ 没装编译器
❌ Permission denied
→ 用 ./程序名,不是 程序名
❌ 链接错误(undefined reference)
→ 没把 .cpp 文件一起编译
如果你愿意,可以告诉我:
我可以给你更针对性的编译方式。