交叉编译学习总结

        今天碰到一个需求,将代码编译成exe格式,但我手头上只有linux系统,这就不得不用上交叉编译操作了。下面基于源码示例操作进行说明:

#include <stdio.h>
int main() {

    printf("Hello, World!\n");

    return 0;
}

常见的编译方式如下

gcc -o hello hello.c

有的大聪明将命令修改如下

gcc -o hello.exe hello.c

通过 上述命令生成的 hello.exe 文件在 Linux 或 macOS 系统上编译时,尽管文件名使用了 .exe 后缀,但它实际上是一个可在 Unix 系统上运行的可执行文件,并不是 Windows 可执行文件格式。直接在 Windows 上运行这个文件会导致错误。要生成可以在 Windows 上运行的可执行文件,您需要在 Windows 上使用 MinGW 或者在其他操作系统上使用交叉编译工具链来生成真正的 Windows 可执行文件。

(1)安装交叉编译工具

要安装交叉编译工具链(以 MinGW 为例)以在 Linux 或 macOS 上生成 Windows 可执行文件,您可以按照以下步骤操作:

》在 Linux 上安装 MinGW 交叉编译工具链

sudo apt update #更新源

sudo apt install mingw-w64 ##安装mingw

x86_64-w64-mingw32-gcc --version ##查看安装版本

x86_64-w64-mingw32-gcc -o hello.exe hello.c

》在 macOS 上安装 MinGW 交叉编译工具链

brew install mingw-w64

x86_64-w64-mingw32-gcc --version

x86_64-w64-mingw32-gcc -o hello.exe hello.c

这样生成的 `hello.exe` 文件可以直接在 Windows 系统上运行。其他注意事项

  • - 如果需要生成 32 位的 Windows 可执行文件,可以使用 `i686-w64-mingw32-gcc` 编译器。
  • - 可以通过安装 `mingw-w64` 包来支持更多的 Windows 版本和架构。

通过这些步骤,您就可以在 Linux 或 macOS 上轻松生成 Windows 可执行文件。

       关于 MinGW-w64 支持的编译器和架构的总结如下:

类别支持内容描述
支持的编译器GCC (GNU Compiler Collection)MinGW-w64 工具链的核心编译器,支持 C、C++ 等语言的编译,生成 Windows 可执行文件和库文件。
Clang/LLVMClang 可以与 MinGW-w64 配合使用,通过 LLVM 后端生成 Windows 可执行文件,提供与 GCC 兼容的命令行界面,并带来更多优化和诊断信息。
支持的目标架构x86 (32-bit)生成 32 位 x86 架构的 Windows 可执行文件。使用 i686-w64-mingw32-gcc 编译器进行交叉编译。
x86_64 (64-bit)生成 64 位 x86_64 架构的 Windows 可执行文件。使用 x86_64-w64-mingw32-gcc 编译器进行交叉编译。
ARM (32-bit)生成适用于 Windows on ARM 的 32 位 ARM 架构可执行文件。需要使用 arm-w64-mingw32-gcc 或类似的交叉编译器(可能需要自定义构建或使用其他工具链)。
ARM64 (64-bit)生成适用于 Windows on ARM 的 64 位 ARM 架构可执行文件。使用 aarch64-w64-mingw32-gcc 或类似的交叉编译器(需要确认工具链的支持情况)。
安装与使用Linux 和 macOS可以通过包管理器(如 aptbrew)安装 MinGW-w64 工具链。安装后使用相应的编译器命令(如 i686-w64-mingw32-gccx86_64-w64-mingw32-gcc)进行编译。

对于 C++ 程序,在 MinGW-w64 工具链中,您可以选择 g++ 编译器来生成适用于 Windows 系统的可执行文件,只需要将上面的gcc换成g++即可。

(2)基于docker编译

      如果需要在x86架构上编译生成arm端运行的程序,可以基于docker构建交叉运行环境,此时可以参考博客docker安装使用系列之交叉编译-CSDN博客。在不同架构和操作系统上进行交叉编译,无论是ARM架构上编译x86程序,x86上编译ARM程序,还是在macOS上编译运行于Windows上的可执行程序,或者在Windows上编译其他系统的程序,这些场景都涉及到交叉编译的概念。每种交叉编译场景可能需要不同的工具链和环境配置。例如,编译Windows程序可能需要使用Microsoft Visual Studio或MinGW,而编译Linux程序可能需要使用GCC或Clang。交叉编译工具可以直接本地安装也可以基于docker来实现。

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值