在Linux环境中部署C++应用程序涉及多个步骤,以下是一个完整的部署流程:
bash
g++ -static -o myapp main.cpp
bash
g++ -o myapp main.cpp
g++ -O2 -Wall -std=c++17 -o myapp main.cpp
ldd myapp
# 基于Debian/Ubuntu
sudo apt-get install libxxx-dev
# 基于RHEL/CentOS
sudo yum install libxxx-devel
# 创建部署目录
mkdir -p deploy/bin deploy/lib
# 复制可执行文件
cp myapp deploy/bin/
# 复制依赖库
ldd myapp | grep "=> /" | awk '{print $3}' | xargs -I '{}' cp -v '{}' deploy/lib/
install()
命令
cmake
install(TARGETS myapp DESTINATION bin)
install(FILES mylib.so DESTINATION lib)
FROM ubuntu:20.04
# 安装依赖
RUN apt-get update && apt-get install -y \
libstdc++6 \
&& rm -rf /var/lib/apt/lists/*
# 复制可执行文件
COPY myapp /usr/local/bin/
CMD ["myapp"]
构建并运行:
docker build -t myapp .
docker run -it --rm myapp
dpkg-deb
rpmbuild
CPack
(CMake集成)创建自包含的可执行文件,无需安装
# 临时设置
export LD_LIBRARY_PATH=/path/to/libs:$LD_LIBRARY_PATH
# 永久设置
echo '/path/to/libs' | sudo tee /etc/ld.so.conf.d/myapp.conf
sudo ldconfig
#!/bin/bash
export LD_LIBRARY_PATH=/path/to/libs:$LD_LIBRARY_PATH
/path/to/myapp "$@"
# /etc/systemd/system/myapp.service
[Unit]
Description=My C++ Application
[Service]
ExecStart=/usr/local/bin/myapp
Restart=always
User=myappuser
[Install]
WantedBy=multi-user.target
管理服务:
sudo systemctl daemon-reload
sudo systemctl start myapp
sudo systemctl enable myapp
strip
减小二进制大小
bash
strip myapp
upx
进一步压缩
bash
upx --best myapp
gdb
调试bash
ulimit -c unlimited
gdb myapp core
通过以上步骤,您可以在Linux环境中有效地部署C++应用程序。