如何在Ubuntu 20.04环境下开发并编译面向Windows的C++控制台应用?
嘿,我之前在Ubuntu上编译依赖Windows API的代码时也碰到过一模一样的问题——gcc默认是针对Linux目标编译的,根本找不到Windows专属的windows.h头文件。解决这个的核心是用交叉编译工具链,也就是能在Linux环境下生成Windows可执行文件的工具,具体步骤如下:
解决Ubuntu下编译Windows API C++程序的问题
1. 安装MinGW-w64交叉编译工具链
Windows的windows.h头文件以及配套的API库都包含在MinGW-w64工具链里,这是目前最成熟的跨平台编译Windows程序的方案。在Ubuntu 20.04上直接通过apt包管理器安装即可:
sudo apt update sudo apt install gcc-mingw-w64 g++-mingw-w64
安装完成后,工具链会自动配置好Windows头文件和库的路径,不用你手动去下载或复制windows.h。
2. 使用交叉编译器编译你的代码
MinGW-w64提供了针对不同Windows架构的编译器,你需要根据目标Windows系统选择:
- 编译64位Windows程序:用
x86_64-w64-mingw32-g++(C++)或x86_64-w64-mingw32-gcc(C语言) - 编译32位Windows程序:用
i686-w64-mingw32-g++或i686-w64-mingw32-gcc
注意你的代码文件名有空格(HFmanager billing system.cpp),编译时要么把文件名改成无空格的(比如HFmanagerBillingSystem.cpp),要么用双引号把文件名括起来。以编译64位可执行文件为例:
x86_64-w64-mingw32-g++ "HFmanager billing system.cpp" -o HFmanagerBillingSystem.exe
执行完命令后,你会得到一个.exe格式的文件,这个文件就能直接在Windows系统上运行了。
3. 额外注意事项
- 少数Windows专属的新API可能不在MinGW-w64的支持范围内,但常规的控制台操作、文件IO、系统调用这些基础API都能完美兼容。
- 如果你的代码用到了其他Windows库(比如
user32.lib用于窗口操作),需要在编译时用-l参数链接对应的库,比如:
x86_64-w64-mingw32-g++ yourcode.cpp -o yourapp.exe -luser32
- 尽量避免在代码文件名里用空格或特殊字符,否则容易出现路径解析错误,增加调试成本。
这样操作后,你就能顺利在Ubuntu环境下开发并编译依赖Windows API的C++控制台应用了。
内容的提问来源于stack exchange,提问作者HakimFerchichi
相关产品推荐
相关产品推荐

