在 Linux 下编译 C++ 程序,常见做法有 命令行直接编译 和 使用构建工具 两种,下面从简单到进阶系统讲一下。
g++ 编译(推荐新手)# Ubuntu / Debian
sudo apt update
sudo apt install g++
# CentOS / Rocky / Alma
sudo yum install gcc-c++
# Arch
sudo pacman -S gcc
验证:
g++ --version
// main.cpp
#include <iostream>
using namespace std;
int main() {
cout << "Hello Linux C++" << endl;
return 0;
}
g++ main.cpp -o main
./main
✅ 输出:
Hello Linux C++
g++ -Wall -Wextra -g main.cpp -o main
g++ -std=c++11 main.cpp
g++ -std=c++17 main.cpp
g++ -std=c++20 main.cpp
g++ -O2 main.cpp # 常用
g++ -O3 main.cpp # 更激进
project/
├── main.cpp
├── foo.cpp
├── foo.h
g++ main.cpp foo.cpp -o app
或分步编译:
g++ -c foo.cpp # 生成 foo.o
g++ -c main.cpp # 生成 main.o
g++ foo.o main.o -o app
Makefile(工程必备)CXX = g++
CXXFLAGS = -Wall -std=c++17 -O2
app: main.o foo.o
$(CXX) main.o foo.o -o app
main.o: main.cpp
$(CXX) $(CXXFLAGS) -c main.cpp
foo.o: foo.cpp
$(CXX) $(CXXFLAGS) -c foo.cpp
clean:
rm -f *.o app
make
./app
make clean
g++ main.cpp -o main -lpthread
如果是自定义库:
g++ main.cpp -L./lib -lmylib
CMakeLists.txtcmake_minimum_required(VERSION 3.10)
project(demo)
set(CMAKE_CXX_STANDARD 17)
add_executable(demo main.cpp foo.cpp)
mkdir build
cd build
cmake ..
make
./demo
✅ 大型项目、跨平台首选
g++ -g main.cpp -o main
gdb ./main
常用:
run
break main
next
print x
| 错误 | 原因 |
|---|---|
g++: command not found |
没装 g++ |
undefined reference |
没链接库 / 没编译 cpp |
segmentation fault |
野指针 / 越界 |
std::filesystem 报错 |
需要 -std=c++17 |
✅ 日常开发
g++ + Makefile
✅ 正规项目
g++ + CMake
✅ 调试
g++ -g + gdb
如果你愿意,我可以:
你现在是 初学者 还是 已经在做项目了?