在 Ubuntu 下用 C++ 静态编译,通常是指把 标准库(libstdc++)和运行库(libgcc) 一起打进可执行文件,生成不依赖系统动态库的程序。
下面按常见场景说明。
g++ main.cpp -o main -static
✅ 效果:
libstdc++、libgcc、libc 等.so⚠️ 注意:
sudo apt update
sudo apt install g++ build-essential
sudo apt install libc6-dev glibc-static
有时你只想静态 C++ 库,但还是用动态 libc:
g++ main.cpp -o main -static-libgcc -static-libstdc++
✅ 优点:
libstdc++.socmake -DCMAKE_EXE_LINKER_FLAGS="-static" ..
make
set(CMAKE_EXE_LINKER_FLAGS "-static")
或只静态 C++:
set(CMAKE_EXE_LINKER_FLAGS "-static-libgcc -static-libstdc++")
ldd main
not a dynamic executable
libstdc++.so.6 => ...
报错类似:
cannot find -lstdc++
解决:
sudo apt install libstdc++-static
需要显式加:
g++ main.cpp -o main -static -pthread
必须:
.a 静态版本.a 路径例如:
g++ main.cpp -o main -static \
/usr/lib/x86_64-linux-gnu/libopencv_core.a \
-lpthread
| 需求 | 推荐 |
|---|---|
| 完全独立可执行 | -static |
| 只静态 C++ | -static-libstdc++ -static-libgcc |
| 发布程序 | 静态 C++ + 动态 libc |
| 嵌入式/无环境 | 完全静态 |
如果你有 具体代码 / 使用的库(如 Boost、OpenCV、pthread),我可以给你精确命令。