在 CentOS 上进行 C++ 开发/部署 时,和 Ubuntu 等发行版有一些明显差异,下面从环境、编译、依赖、部署、坑点几个方面总结注意事项。
gcc 4.8.5,非常老,不支持 C++17/20gcc 8+,但仍偏旧gcc --version
g++ --version
如果版本太低:
# CentOS 7
sudo yum install centos-release-scl
sudo yum install devtoolset-11
scl enable devtoolset-11 bash
g++ -std=c++17 main.cpp -o app
⚠️ 老 gcc 不支持:
<filesystem>(gcc < 8)<span>(gcc < 10)sudo yum install gcc-c++ make cmake
常用开发库:
sudo yum install openssl-devel
sudo yum install boost-devel
sudo yum install zlib-devel
export CC=/opt/rh/devtoolset-11/root/usr/bin/gcc
export CXX=/opt/rh/devtoolset-11/root/usr/bin/g++
或 CMake:
set(CMAKE_CXX_COMPILER "/opt/rh/devtoolset-11/root/usr/bin/g++")
CentOS 上动态库兼容性差,建议:
g++ -static main.cpp
报错示例:
/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found
✅ 解决:
g++ -static-libstdc++ -static-libgcc
export LD_LIBRARY_PATH=/your/lib:$LD_LIBRARY_PATH
或:
/etc/ld.so.conf.d/your.conf
ldconfig
ulimit -a
常见调整:
* soft nofile 65535
* hard nofile 65535
g++ main.cpp -pthread
g++ -g -O0 main.cpp
g++ -O2 -march=native
FROM centos:7
| 问题 | 原因 |
|---|---|
| C++17 编译失败 | gcc 太老 |
| 运行缺库 | 动态链接 |
| 跨机运行崩溃 | glibc 不一致 |
| CMake 找错编译器 | 没指定 CXX |
| 线程创建失败 | ulimit 限制 |
如果你能告诉我:
我可以给你更具体的一套配置方案。