MinGW-w64
1.1、MinGW-w64简介

MinGW存在的问题:

  • MinGW只能编译为Win32程序,不能编译为Win64程序。
  • MinGW更新速度及其慢,不能很好的支持较新的Windows API

为了解决这些问题,一些人forkMinGW, 新项目被命名为MinGW-w64

MinGW-w64不仅能编译为Win64程序,也能编译为Win32程序。

MinGW-w64同样是跨平台软件,可以运行在WindowsGNU/LinuxmacOS中。

MinGW-w64官网:http://mingw-w64.org

1.2、通过包管理器安装MinGW-w64
操作系统包管理器安装命令
WindowsChocolateychoco install -y MinGW
macOSHomeBrewbrew install mingw-w64
GNU/LinuxLinuxBrewbrew install mingw-w64
aptsudo apt-get install -y *-w64-x86-*
CentOSyumsudo yum install -y mingw-w64-tools mingw32-binutils
dnfsudo dnf install -y mingw-w64-tools mingw32-binutils

Arch Linux

ArcoLinux

Manjaro Linux

pacmansudo pacman -Syyu --noconfirm
sudo pacman -S    --noconfirm mingw-w64-*
1.3、MinGW-w64中包含的工具

GNU/LinuxUNIX系统中,MinGW-w64提供的命令以${arch}-w64-mingw32-作为前缀,这是因为这些工具本身是从GCCGNU BinUtils等项目移植的, 如果不加前缀的话,会与这些软件的命令互相覆盖。

这些命令的用法与GCCGNU BinUtils等项目中的命令的用法完全一样。

archbit
i68632bit
x86_6464bit
${arch}-w64-mingw32-gccGCCgcc
${arch}-w64-mingw32-gcc-arGCCgcc-ar
${arch}-w64-mingw32-gcc-nmGCCgcc-nm
${arch}-w64-mingw32-gcc-ranlibGCCgcc-ranlib
${arch}-w64-mingw32-g++GCCg++
${arch}-w64-mingw32-gcovGCCgcov
${arch}-w64-mingw32-gcov-dumpGCCgcov-dump
${arch}-w64-mingw32-gcov-toolGCCgcov-tool
${arch}-w64-mingw32-c++GCCc++
${arch}-w64-mingw32-cppGCCcpp
${arch}-w64-mingw32-asBinUtilsas
${arch}-w64-mingw32-ldBinUtilsld
${arch}-w64-mingw32-arBinUtilsar
${arch}-w64-mingw32-ranlibBinUtilsranlib
${arch}-w64-mingw32-nmBinUtilsnm
${arch}-w64-mingw32-stripBinUtilsstrip
${arch}-w64-mingw32-c++filtBinUtilsc++filt
${arch}-w64-mingw32-objcopyBinUtilsobjcopy
${arch}-w64-mingw32-objdumpBinUtilsobjdump
${arch}-w64-mingw32-readelfBinUtilsreadelf
${arch}-w64-mingw32-gprofBinUtilsgprof
${arch}-w64-mingw32-stringsBinUtilsstrings
${arch}-w64-mingw32-sizeBinUtilssize
${arch}-w64-mingw32-addr2lineBinUtilsaddr2line
${arch}-w64-mingw32-nlmconvBinUtilsnlmconv
${arch}-w64-mingw32-dlltoolBinUtilsdlltool
${arch}-w64-mingw32-windmcBinUtilswindmc
${arch}-w64-mingw32-windresBinUtilswindres
1.4、使用MinGW-w64进行交叉编译

step1、编写一个C源文件hello.c,其内容如下:

#include <stdio.h>

int main() {
    printf("Hello fpliu\n");
    return 0;
}

step2、使用x86_64-w64-mingw32-gcc命令编译

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

step3、使用file命令查看一下hello.exe的文件格式

step4、使用wine64命令运行hello.exe