在 CentOS 上做 C++ 开发/部署,确实有不少“坑”,尤其是和 Ubuntu、macOS 对比时更明显。下面按常见场景给你总结一下,都是实战里容易踩的。
CentOS 7 默认:
gcc --version
# gcc 4.8.5
问题:
std::filesystem 没有✅ 解决:
yum install centos-release-scl
yum install devtoolset-11
scl enable devtoolset-11 bash
⚠️ 注意:
scl enable 只对当前 shell 有效.bashrc 或 systemd 环境在 新机器编译,老机器运行 时:
/lib64/libc.so.6: version `GLIBC_2.28' not found
原因:
✅ 建议:
g++ -static
例如:
✅ 方案:
编译通过,运行报错:
error while loading shared libraries: libxxx.so.1
原因:
/usr/local/lib 不在默认路径✅ 解决:
echo "/usr/local/lib" >> /etc/ld.so.conf
ldconfig
或运行前:
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH
CentOS 7 默认:
cmake 2.8
现代项目常要求:
cmake >= 3.16
✅ 解决:
pip install cmake
# 或
yum install cmake3
⚠️ 注意:
cmake3 命令是 cmake3,不是 cmake原因:
✅ 正确做法:
rm -rf build
mkdir build && cd build
cmake -DCMAKE_CXX_COMPILER=g++-11 ..
现象:
✅ 检查:
getenforce
✅ 临时关闭(不推荐长期):
setenforce 0
C++ 服务起不来?
firewall-cmd --add-port=8080/tcp --permanent
firewall-cmd --reload
crash 没 stacktrace:
No symbol table info available
✅ 编译时:
-g -O0
✅ 安装 debuginfo:
debuginfo-install glibc
std::filesystem 需要额外链接-lstdc++fs # gcc < 9
std::thread 需要 pthread否则运行时崩:
-pthread
你在 .bashrc 里设了 devtoolset,但服务起不来。
✅ 正确方式:
[Service]
Environment=PATH=/opt/rh/devtoolset-11/root/usr/bin:$PATH
ulimit -c unlimited
并设置:
echo "/data/core/core-%e-%p" > /proc/sys/kernel/core_pattern
✅ 开发 & 部署原则
如果你愿意,可以告诉我:
我可以直接给你一套可落地的配置方案。