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-scl
sudo 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 build
cmake .. # 生成构建系统
make # 编译项目(生成可执行文件)
3. 处理依赖库
C++程序的依赖库分为系统库(如glibc)和第三方库(如Boost、OpenSSL),需确保服务器上已安装所需依赖:
yum安装常见库的开发包(-devel后缀)。例如,安装OpenSSL开发库:sudo yum install -y openssl-devel
yum安装(如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_PATH
4. 部署到服务器
将编译好的可执行文件传输到CentOS服务器,可使用scp(命令行)或WinSCP(图形化工具)。例如,将本地的myapp传输到服务器的/opt/myapp目录:
scp myapp user@server_ip:/opt/myapp # 替换user为服务器用户名,server_ip为服务器IP
传输完成后,登录服务器,为可执行文件设置运行权限:
ssh user@server_ip
cd /opt/myapp
chmod +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++ Application
After=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 myapp
7. 安全与维护建议
firewalld)限制访问;避免以root用户运行程序,使用普通用户+sudo提升权限。./myapp > myapp.log 2>&1 &),便于排查问题;或使用journalctl查看systemd服务日志(journalctl -u myapp)。top、htop查看资源占用),及时更新依赖库以修复安全漏洞。