1. 准备编译环境在CentOS上部署C++程序前,需安装必要的编译工具和基础依赖库。运行以下命令安装GCC/G++编译器、CMake构建工具及开发工具集:

sudo yum update -y# 更新系统包sudo yum groupinstall -y "Development Tools"# 安装编译工具链(gcc、g++、make等)sudo yum install -y cmake # 安装CMake(跨平台构建工具)若需使用较新版本的GCC(如10),可通过Software Collections(SCL)安装:
sudo yum install -y centos-release-sclsudo yum install -y devtoolset-10-gcc-c++scl enable devtoolset-10 bash # 启用新版本GCC(临时生效)2. 编译C++程序根据项目复杂度选择编译方式:
main.cpp编译为myapp:g++ -o myapp main.cpp # 默认静态编译(无外部依赖时可直接运行)CMakeLists.txt文件,定义项目名称、可执行文件及依赖库。例如:cmake_minimum_required(VERSION 3.10)project(MyApp)add_executable(MyApp main.cpp lib.cpp)# 添加源文件find_package(OpenSSL REQUIRED)# 查找OpenSSL库target_link_libraries(MyApp PRIVATE OpenSSL::SSL OpenSSL::Crypto)# 链接库mkdir build && cd buildcmake ..# 生成构建系统make# 编译项目(生成可执行文件)3. 处理依赖库C++程序的依赖库分为系统库(如glibc)和第三方库(如Boost、OpenSSL),需确保服务器上已安装所需依赖:
yum安装常见库的开发包(-devel后缀)。例如,安装OpenSSL开发库:sudo yum install -y openssl-develyum安装(如boost-devel);find_package自动查找(需库支持CMake);/usr/local/lib)。ldd命令检查可执行文件的动态库依赖,确保无缺失。例如:ldd myapp若输出显示“not found”,需安装对应库或设置LD_LIBRARY_PATH环境变量(临时生效):export LD_LIBRARY_PATH=/path/to/libs:$LD_LIBRARY_PATH4. 部署到服务器将编译好的可执行文件传输到CentOS服务器,可使用scp(命令行)或WinSCP(图形化工具)。例如,将本地的myapp传输到服务器的/opt/myapp目录:
scp myapp user@server_ip:/opt/myapp# 替换user为服务器用户名,server_ip为服务器IP传输完成后,登录服务器,为可执行文件设置运行权限:
ssh user@server_ipcd /opt/myappchmod +x myapp # 赋予执行权限5. 运行程序
./myapp # 当前目录运行/opt/myapp/myapp# 绝对路径运行LD_LIBRARY_PATH指定路径:export LD_LIBRARY_PATH=/opt/myapp/libs:$LD_LIBRARY_PATH./myapp若需永久生效,可将上述命令添加到~/.bashrc或/etc/profile文件中。6. 配置systemd服务(可选,推荐用于生产环境)为确保程序在服务器重启后自动启动,可创建systemd服务单元文件:
/etc/systemd/system/myapp.service):sudo nano /etc/systemd/system/myapp.service[Unit]Description=My C++ ApplicationAfter=network.target# 在网络服务启动后运行[Service]User=myuser # 运行程序的用户(避免使用root)Group=mygroup # 运行程序的组ExecStart=/opt/myapp/myapp# 可执行文件路径Restart=always# 程序崩溃后自动重启Environment="PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"# 环境变量[Install]WantedBy=multi-user.target# 开机自启的目标sudo systemctl daemon-reload# 重载配置sudo systemctl start myapp # 启动服务sudo systemctl enable myapp# 设置开机自启sudo systemctl status myapp7. 安全与维护建议
firewalld)限制访问;避免以root用户运行程序,使用普通用户+sudo提升权限。./myapp > myapp.log 2>&1 &),便于排查问题;或使用journalctl查看systemd服务日志(journalctl -u myapp)。top、htop查看资源占用),及时更新依赖库以修复安全漏洞。