在 CentOS 上做 C++ 开发/部署,确实有不少“经典坑”,下面是按常见场景总结的,基本都是实战踩过的。
gcc 4.8.5坑:
auto x = std::make_unique<int>(); // 编译不过
解决:
yum install centos-release-scl
yum install devtoolset-11
scl enable devtoolset-11 bash
或编译时指定:
g++ -std=c++17
在新机器编译,旧机器运行时常见:
/lib64/libstdc++.so.6: version `GLIBCXX_3.4.21' not found
原因:
解决:
g++ -static-libstdc++ -static-libgcc
version `GLIBC_2.14' not found
原因:
建议:
cmake --version
# 2.8.x
现代项目需要:
cmake_minimum_required(VERSION 3.16)
解决:
pip install cmake
# 或手动装二进制
fatal error: openssl/ssl.h: No such file or directory
原因:
只装了运行时,没装 -devel
解决:
yum install openssl-devel
常见:
zlib-develboost-develncurses-develundefined reference to `pthread_create'
解决:
g++ main.cpp -lpthread
或 CMake:
find_package(Threads REQUIRED)
target_link_libraries(app Threads::Threads)
-D_GLIBCXX_USE_CXX11_ABI=0
场景:
否则:
undefined reference to `std::string::_M_create`
排查:
getenforce
ausearch -m avc -ts recent
which g++
echo $PATH
建议:
scl / module / Docker✅ 用 Docker(最稳)
FROM centos:7
RUN yum install -y centos-release-scl
RUN yum install -y devtoolset-11
✅ 编译和运行环境一致
✅ 少用系统自带工具链
✅ 明确指定 C++ 标准
如果你愿意,可以告诉我:
我可以直接帮你“对号入座”。