温馨提示×

linux c++怎样跨平台编译

小樊
42
2026-09-20 10:39:15
栏目: 编程语言

在 Linux 下用 C++ 做跨平台编译,通常目标是:
一份代码,能在 Linux / Windows / macOS 上编译运行

下面从「思路 → 工具 → 示例」系统讲一下。


一、核心思路

跨平台 ≠ 换系统重写,而是:

  1. 代码层面
    • 避免系统特有 API
    • 用条件编译隔离平台差异
  2. 构建层面
    • 用跨平台构建系统
  3. 工具链层面
    • 本地编译 / 交叉编译 / 模拟编译

二、代码层面的跨平台写法

1. 使用标准 C++(最重要)

✅ 推荐:

#include <iostream>
#include <filesystem>
#include <thread>

❌ 避免:

#include <windows.h>
#include <unistd.h> // 直接用

2. 平台差异用宏隔离

#ifdef _WIN32
    // Windows
#elif __linux__
    // Linux
#elif __APPLE__
    // macOS
#endif

常见宏:

平台
_WIN32 Windows
__linux__ Linux
__APPLE__ macOS

3. 使用跨平台库

功能
网络 Boost.Asio / libcurl
文件 std::filesystem
线程 std::thread
GUI Qt / SDL / wxWidgets
日志 spdlog

三、构建系统(关键)

✅ 推荐:CMake(最主流)

示例 CMakeLists.txt

cmake_minimum_required(VERSION 3.10)
project(demo)

add_executable(demo main.cpp)

编译方式

mkdir build
cd build
cmake ..
make

在 Windows 上:

cmake .. -G "Visual Studio 17 2022"

四、跨平台编译方式

方式 1:本地编译(最推荐)

  • Linux → Linux
  • Windows → Windows
  • macOS → macOS

✅ 最简单、最少坑


方式 2:交叉编译(Linux 编 Windows)

示例:Linux → Windows (MinGW)

sudo apt install mingw-w64
x86_64-w64-mingw32-g++ main.cpp -o app.exe

CMake:

cmake .. -DCMAKE_TOOLCHAIN_FILE=mingw.cmake

方式 3:交叉编译(Linux → ARM)

sudo apt install gcc-arm-linux-gnueabihf
arm-linux-gnueabihf-g++ main.cpp

方式 4:WSL / 虚拟机

  • Windows 用 WSL 编 Linux
  • macOS 用 VM 编 Linux

五、CI 自动跨平台编译(专业做法)

使用:

  • GitHub Actions
  • GitLab CI

示例(GitHub Actions):

jobs:
  build:
    strategy:
      matrix:
        os: [ubuntu-latest, windows-latest, macos-latest]
    runs-on: ${{ matrix.os }}
    steps:
      - uses: actions/checkout@v3
      - run: cmake -B build
      - run: cmake --build build

六、常见坑

❌ 路径分隔符

#ifdef _WIN32
#define PATH_SEP '\\'
#else
#define PATH_SEP '/'
#endif

❌ 行尾符
❌ 字节对齐
❌ 动态库后缀 .so / .dll / .dylib


七、总结(最简路线)

新手推荐组合

C++17 + CMake + 标准库 + 条件编译

进阶

CMake + vcpkg/conan + CI

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

  • 目标平台(Win / macOS / ARM?)
  • 是否用 GUI / 网络 / 多线程
  • 当前项目规模

我可以直接给你一套可用的跨平台模板

0