TikTok评论采集工具:如何轻松获取海量用户反馈数据?
2026/5/10 20:40:08
在 Ubuntu 下使用MinGW-w64 作为交叉编译器来构建 Windows 平台的 C/C++/Fortran 项目,是一种常见的跨平台开发方式。以下是完整的操作指南、关键注意事项及最佳实践。
Ubuntu 官方仓库提供了 MinGW-w64 工具链,支持多种目标架构(如x86_64-w64-mingw32、i686-w64-mingw32)。
sudoaptupdatesudoaptinstallgcc-mingw-w64-x86-64 g++-mingw-w64-x86-64 gfortran-mingw-w64-x86-64若需 32 位 Windows 支持,安装
gcc-mingw-w64-i686等对应包。
x86_64-w64-mingw32-gcc --version x86_64-w64-mingw32-g++ --version x86_64-w64-mingw32-gfortran --version这些命令应能正常输出版本信息。
// hello.c#include<stdio.h>intmain(){printf("Hello from Windows!\n");return0;}编译:
x86_64-w64-mingw32-gcc -o hello.exe hello.c生成的hello.exe可在 Windows 上直接运行。
// test.cpp#include<iostream>intmain(){std::cout<<"C++ on Windows via MinGW-w64\n";return0;}编译:
x86_64-w64-mingw32-g++ -o test.exe test.cpp! hello.f90 program hello print *, 'Hello from Fortran on Windows!' end program编译:
x86_64-w64-mingw32-gfortran -o hello.exe hello.f90创建mingw64-toolchain.cmake:
set(CMAKE_SYSTEM_NAME Windows) set(CMAKE_SYSTEM_PROCESSOR x86_64) set(CMAKE_C_COMPILER x86_64-w64-mingw32-gcc) set(CMAKE_CXX_COMPILER x86_64-w64-mingw32-g++) set(CMAKE_Fortran_COMPILER x86_64-w64-mingw32-gfortran) set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER) set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY) set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)构建项目:
mkdirbuild&&cdbuild cmake..-DCMAKE_TOOLCHAIN_FILE=../mingw64-toolchain.cmake cmake --build.输出的可执行文件和 DLL 将是 Windows 格式(PE/COFF)。
CC=x86_64-w64-mingw32-gcc\CXX=x86_64-w64-mingw32-g++\FC=x86_64-w64-mingw32-gfortran\cmake..-DCMAKE_SYSTEM_NAME=Windows./configure --host=x86_64-w64-mingw32makeAutotools 会自动使用x86_64-w64-mingw32-*工具链。
-static),生成的.exe无需额外 DLL。libgcc_s_seh-1.dll、libstdc++-6.dll、libgfortran-5.dll等。-static避免依赖问题:x86_64-w64-mingw32-g++ -static -o app.exe app.cppUbuntu 的 MinGW-w64 包通常提供两种线程模型:
x86_64-w64-mingw32-gcc→ 默认win32线程(无 pthread)x86_64-w64-mingw32-gcc-posix→ 支持pthread(通过 winpthreads)如果项目使用
std::thread、OpenMP 或依赖 POSIX 线程,必须使用posix版本:
# 安装 posix 版本(如果未安装)sudoaptinstallgcc-mingw-w64-x86-64-posix g++-mingw-w64-x86-64-posix# 使用x86_64-w64-mingw32-g++-posix -static -fopenmp -o omp.exe omp.cppgfortran会链接libgfortran,若动态链接,需分发相应 DLL。-static-libgfortran -static-libgcc可减少依赖:x86_64-w64-mingw32-gfortran -static -static-libgfortran -static-libgcc -o fapp.exe fapp.f90\,但 MinGW 在 Linux 下编译时仍用/。CMAKE_INSTALL_PREFIX或运行时检测。.so或 MSVC 的.lib。gitclone https://github.com/microsoft/vcpkg ./vcpkg/bootstrap-vcpkg.sh ./vcpkginstallzlib:x64-mingw-static然后在 CMake 中集成。
.exe只能在Windows或Wine上运行。sudoaptinstallwine wine ./myapp.exegdb(MinGW 版本)配合 Wine,但体验有限;建议在 Windows 上用 GDB 或 Visual Studio Debugger。| 问题 | 解决方案 |
|---|---|
undefined reference to '__imp_xxx' | 缺少导入库,或未正确链接 DLL;检查是否混用了 MSVC 和 MinGW 库 |
std::thread not supported | 使用*-posix编译器版本 |
| Fortran 程序崩溃 | 添加-static-libgfortran -static-libgcc |
| OpenMP 不工作 | 确保使用*-posix编译器,并加-fopenmp |
| 生成的 exe 在 Windows 报错“不是有效的 Win32 应用” | 检查是否误用了 32/64 位工具链不匹配 |
✅ 安装正确的 MinGW-w64 工具链(含posix版本如需线程)
✅ 使用 CMake + toolchain file 管理交叉编译
✅ 优先静态链接(-static)避免运行时依赖
✅ 所有依赖库必须用相同工具链交叉编译
✅ 用 Wine 快速验证可执行文件
✅ Fortran 项目添加-static-libgfortran -static-libgcc
✅ 避免 C++ ABI 混用(不要混用 MSVC/MinGW/Clang)