温馨提示×

Linux C++如何部署

小樊
44
2026-07-31 19:44:01
栏目: 编程语言

下面给你一个从开发到部署的完整 Linux C++ 部署流程,适合服务器 / 嵌入式 / 云环境,从简单到规范逐步展开。


一、Linux C++ 部署的基本流程

源码 → 编译 → 生成可执行文件 → 部署到目标机器 → 运行

二、本地编译部署(最简单)

1️⃣ 编写 C++ 程序

// main.cpp
#include <iostream>

int main() {
    std::cout << "Hello Linux C++ Deploy" << std::endl;
    return 0;
}

2️⃣ 编译

使用 g++

g++ main.cpp -o app

推荐(带优化)

g++ -O2 -Wall -std=c++17 main.cpp -o app

3️⃣ 运行

./app

✅ 这是最基础的部署方式


三、生产环境推荐方式(Makefile)

1️⃣ 编写 Makefile

CXX = g++
CXXFLAGS = -O2 -Wall -std=c++17

TARGET = app
SRC = main.cpp

$(TARGET): $(SRC)
	$(CXX) $(CXXFLAGS) $(SRC) -o $(TARGET)

clean:
	rm -f $(TARGET)

2️⃣ 编译与部署

make
./app

✅ 适合中小型项目


四、跨机器部署(常见生产场景)

场景

  • 编译机:Ubuntu / CentOS
  • 部署机:另一台 Linux 服务器

1️⃣ 编译(静态链接,推荐)

g++ -O2 -static main.cpp -o app

✅ 优点:

  • 不依赖目标机器 glibc
  • 部署最简单

❌ 缺点:

  • 文件体积大

2️⃣ 拷贝到目标机器

scp app user@server:/opt/myapp/

3️⃣ 运行

ssh user@server
cd /opt/myapp
chmod +x app
./app

五、动态库部署(常见但易踩坑)

1️⃣ 编译动态库

g++ -fPIC -shared utils.cpp -o libutils.so

2️⃣ 链接动态库

g++ main.cpp -L. -lutils -o app

3️⃣ 运行时指定库路径

export LD_LIBRARY_PATH=/opt/myapp/lib:$LD_LIBRARY_PATH
./app

✅ 或写入 /etc/ld.so.conf.d/


六、使用 CMake(推荐大型项目)

1️⃣ CMakeLists.txt

cmake_minimum_required(VERSION 3.10)
project(MyApp)

set(CMAKE_CXX_STANDARD 17)

add_executable(app main.cpp)

2️⃣ 编译

mkdir build
cd build
cmake ..
make

3️⃣ 安装部署

make install

或手动:

cp app /usr/local/bin/

七、作为系统服务部署(服务器常用)

systemd 示例

1️⃣ 创建服务文件

# /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

2️⃣ 启动服务

systemctl daemon-reload
systemctl start myapp
systemctl enable myapp

✅ 适合后台服务、守护进程


八、Docker 部署(现代推荐)

1️⃣ Dockerfile

FROM ubuntu:22.04

COPY app /app/app
RUN chmod +x /app/app

CMD ["/app/app"]

2️⃣ 构建 & 运行

docker build -t mycppapp .
docker run mycppapp

✅ 环境一致、易扩展


九、常见问题

❓ 运行时报 not found

./app: No such file or directory

✅ 原因:动态链接器不匹配
✅ 解决:

  • 静态编译
  • 或安装对应 glibc

❓ 查看依赖

ldd app

十、推荐实践总结

场景 推荐方式
简单程序 g++ 直接编译
中型项目 Makefile
大型项目 CMake
跨机器 静态编译
后台服务 systemd
云 / 微服务 Docker

如果你愿意,可以告诉我:

  • 部署目标(服务器 / 容器 / 嵌入式)
  • 是否使用第三方库
  • 是否跨平台

我可以给你定制一套完整部署方案

0