下面给你一个从开发到部署的完整 Linux C++ 部署流程,适合服务器 / 嵌入式 / 云环境,从简单到规范逐步展开。
源码 → 编译 → 生成可执行文件 → 部署到目标机器 → 运行
// main.cpp
#include <iostream>
int main() {
std::cout << "Hello Linux C++ Deploy" << std::endl;
return 0;
}
g++ main.cpp -o app
g++ -O2 -Wall -std=c++17 main.cpp -o app
./app
✅ 这是最基础的部署方式
CXX = g++
CXXFLAGS = -O2 -Wall -std=c++17
TARGET = app
SRC = main.cpp
$(TARGET): $(SRC)
$(CXX) $(CXXFLAGS) $(SRC) -o $(TARGET)
clean:
rm -f $(TARGET)
make
./app
✅ 适合中小型项目
g++ -O2 -static main.cpp -o app
✅ 优点:
❌ 缺点:
scp app user@server:/opt/myapp/
ssh user@server
cd /opt/myapp
chmod +x app
./app
g++ -fPIC -shared utils.cpp -o libutils.so
g++ main.cpp -L. -lutils -o app
export LD_LIBRARY_PATH=/opt/myapp/lib:$LD_LIBRARY_PATH
./app
✅ 或写入 /etc/ld.so.conf.d/
cmake_minimum_required(VERSION 3.10)
project(MyApp)
set(CMAKE_CXX_STANDARD 17)
add_executable(app main.cpp)
mkdir build
cd build
cmake ..
make
make install
或手动:
cp app /usr/local/bin/
# /etc/systemd/system/myapp.service
[Unit]
Description=My C++ App
After=network.target
[Service]
ExecStart=/opt/myapp/app
Restart=always
User=appuser
[Install]
WantedBy=multi-user.target
systemctl daemon-reload
systemctl start myapp
systemctl enable myapp
✅ 适合后台服务、守护进程
FROM ubuntu:22.04
COPY app /app/app
RUN chmod +x /app/app
CMD ["/app/app"]
docker build -t mycppapp .
docker run mycppapp
✅ 环境一致、易扩展
not found./app: No such file or directory
✅ 原因:动态链接器不匹配
✅ 解决:
ldd app
| 场景 | 推荐方式 |
|---|---|
| 简单程序 | g++ 直接编译 |
| 中型项目 | Makefile |
| 大型项目 | CMake |
| 跨机器 | 静态编译 |
| 后台服务 | systemd |
| 云 / 微服务 | Docker |
如果你愿意,可以告诉我:
我可以给你定制一套完整部署方案。