将 CentOS 上的 C++ 代码移植,一般分几种常见场景。下面我先给你一个通用思路 + 常见坑位清单,然后再针对你可能的目标系统(如 Ubuntu / Rocky / Alma / 新版本 GCC / 跨平台)给出具体做法。
常见目标:
不同目标,做法差异很大。下面先讲最常见的情况。
在 源 CentOS 机器上执行:
cat /etc/os-release
gcc --version
g++ --version
ldd --version
uname -m
重点记录:
GLIBC_2.17)yum 安装的第三方库#include <sys/vfs.h> // CentOS 有,Ubuntu 可能不同
sudo apt update
sudo apt install build-essential
sudo apt install g++
sudo apt install cmake
sudo dnf groupinstall "Development Tools"
sudo dnf install gcc gcc-c++ cmake
✅ 正确做法
rm -rf build
mkdir build
cd build
cmake ..
make
❌ 错误做法
scp a.out target_machine
./a.out # 99% 会报 glibc 不兼容
错误信息类似:
/lib64/libc.so.6: version `GLIBC_2.28' not found
✅ 解决方案:
CentOS 7 默认:
gcc 4.8
Ubuntu 22.04:
gcc 11+
✅ 解决方案:
#if __cplusplus >= 201703L
// C++17
#endif
或指定标准:
g++ -std=c++17 main.cpp
比如:
fatal error: boost/asio.hpp: No such file or directory
✅ 解决:
yum install boost-devel
apt install libboost-all-dev
| CentOS | Ubuntu |
|---|---|
sys/vfs.h |
sys/statfs.h |
bits/xxx.h |
❌ 不推荐 |
uuid/uuid.h |
uuid-dev |
✅ 建议:
错误示例:
include_directories(/usr/include/XXX)
✅ 推荐:
find_package(Boost REQUIRED)
include_directories(${Boost_INCLUDE_DIRS})
x86_64-w64-mingw32-g++ main.cpp
clang++ -std=c++17 main.cpp
⚠️ 注意:
/lib64epoll(Windows 不支持)✅ 使用:
FROM centos:7
RUN yum install -y gcc gcc-c++ cmake
你可以直接告诉我:
我可以 一步一步帮你完成完整移植方案,甚至帮你改 CMake / Makefile。