You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

CMake+C++编译32位Windows程序失败,提示不支持16位应用

解决跨平台编译Windows程序时的"不支持16位应用"错误

问题原因

你遇到的错误是因为在Linux下编译Windows程序时,未使用正确的MinGW交叉编译工具链,仅通过-m32强制32位编译会生成无效的可执行文件格式(ELF而非Windows PE格式),导致64位Windows系统误判为16位应用。同时你的CMake配置存在几个关键问题:

  • 硬编码gcc/g++编译器,未针对Windows目标使用交叉编译工具链
  • CMAKE_CXX_FLAGS中的-DCMAKE_BUILD_TYPE=release64是无效写法,CMAKE_BUILD_TYPE是CMake变量而非编译宏,且与-m32、Release设置冲突
  • 未根据平台区分可执行文件目标名,同时生成a.exe和a.run会造成冗余

修正后的CMake配置

以下是适配跨平台编译的CMakeLists.txt,支持Linux本地编译和Linux交叉编译Windows程序:

cmake_minimum_required(VERSION 3.10)

project(qpsm)

# 设置全局编译模式
set(CMAKE_BUILD_TYPE Release)
# 统一C++标准
set(CMAKE_CXX_STANDARD 14)
set(CMAKE_CXX_STANDARD_REQUIRED ON)

# 根据目标平台配置编译参数和目标文件名
if(CMAKE_SYSTEM_NAME STREQUAL "Windows")
    # Windows目标:使用MinGW交叉编译工具链
    set(TARGET_EXECUTABLE "a.exe")
    # 可选:强制编译32位Windows程序(需对应32位工具链)
    # set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m32")
elseif(CMAKE_SYSTEM_NAME STREQUAL "Linux")
    # Linux目标:使用本地gcc/g++
    set(TARGET_EXECUTABLE "a.run")
    # 可选:强制编译32位Linux程序
    # set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -m32")
endif()

add_executable(${TARGET_EXECUTABLE} main.cpp)

编译步骤(Linux下交叉编译Windows程序)

  1. 安装MinGW交叉编译工具链

    • 编译32位Windows程序:
      sudo apt install gcc-mingw-w64-i686 g++-mingw-w64-i686
      
    • 编译64位Windows程序:
      sudo apt install gcc-mingw-w64-x86-64 g++-mingw-w64-x86-64
      
  2. 执行CMake配置

    • 生成32位Windows程序构建文件:
      mkdir build && cd build
      cmake .. -DCMAKE_SYSTEM_NAME=Windows -DCMAKE_C_COMPILER=i686-w64-mingw32-gcc -DCMAKE_CXX_COMPILER=i686-w64-mingw32-g++
      
    • 生成64位Windows程序构建文件:
      mkdir build && cd build
      cmake .. -DCMAKE_SYSTEM_NAME=Windows -DCMAKE_C_COMPILER=x86_64-w64-mingw32-gcc -DCMAKE_CXX_COMPILER=x86_64-w64-mingw32-g++
      
  3. 编译生成可执行文件

    make
    

关键说明

  • 必须使用MinGW交叉编译工具链生成Windows PE格式的可执行文件,直接用Linux的gcc加-m32无法生成正确的Windows程序
  • 如果需要在Windows本地编译,确保安装了MinGW-w64工具链,直接运行CMake即可自动识别平台

内容的提问来源于stack exchange,提问作者Kroyz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 06:36:17