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

Arch Linux下编译C++ CUDA代码生成Windows .exe的最简方法及依赖解决

在Arch Linux交叉编译Windows带依赖的C++项目解决方案

一、先搞定基础交叉编译环境

Arch上用mingw-w64工具链即可,先安装必要的包:

  • 安装基础交叉编译工具:sudo pacman -S mingw-w64-gcc mingw-w64-cmake
  • 确保mingw工具链路径(/usr/x86_64-w64-mingw32/bin/)在环境变量中,避免cmake找不到工具

二、处理SFML和TGUI的库文件

这两个库可以选择用预编译包或源码交叉编译:

方法1:用AUR预编译包(最快捷)

Arch社区提供了mingw版本的SFML和TGUI,借助AUR助手(如yay)直接安装:

  • 安装SFML:yay -S mingw-w64-sfml
  • 安装TGUI:yay -S mingw-w64-tgui
    安装完成后,.lib文件存放在/usr/x86_64-w64-mingw32/lib/,.dll文件在/usr/x86_64-w64-mingw32/bin/,cmake会自动识别这些路径,无需额外配置。

方法2:源码交叉编译(适合版本定制)

如果AUR包版本与项目需求不符,可自行编译:

  1. 克隆SFML源码:git clone https://github.com/SFML/SFML.git
  2. 创建交叉编译构建目录:mkdir sfml-mingw-build && cd sfml-mingw-build
  3. 用mingw的cmake配置参数(生成动态库设BUILD_SHARED_LIBS=ON,静态库设OFF):
x86_64-w64-mingw32-cmake .. \
    -DCMAKE_SYSTEM_NAME=Windows \
    -DCMAKE_BUILD_TYPE=Release \
    -DBUILD_SHARED_LIBS=ON
  1. 编译并安装:make -j$(nproc) && sudo make install
    TGUI的编译步骤完全一致,克隆源码后用相同cmake参数构建即可,注意TGUI依赖SFML,需确保cmake能找到交叉编译好的SFML。

三、CUDA 12.8交叉编译的特殊配置

CUDA 12.8支持交叉编译Windows目标,但需要额外操作:

  1. 确保已安装Linux版CUDA Toolkit 12.8,且nvcc可正常调用
  2. 下载Windows版CUDA Toolkit 12.8(无需安装,直接解压到指定路径,如/opt/cuda-win64/)
  3. 在CMake中指定CUDA交叉编译参数:
    • 启用CUDA语言:enable_language(CUDA)
    • 指定Windows CUDA根目录:set(CUDA_TOOLKIT_ROOT_DIR /opt/cuda-win64/)
    • 设置GPU架构(注意:需根据实际显卡型号调整,比如RTX30系列是86,RTX40系列是89):set(CMAKE_CUDA_ARCHITECTURES 86)
    • 绑定mingw编译器给nvcc:
      set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} --compiler-bindir=/usr/x86_64-w64-mingw32/bin")
      set(CMAKE_CUDA_HOST_COMPILER /usr/bin/x86_64-w64-mingw32-g++)
      
  4. 编译完成后,需将Windows CUDA包中的cudart64_12.dll(解压后的bin/目录下)复制到.exe所在目录,否则Windows无法运行程序。

四、CMakeLists.txt示例配置

以下是完整的CMake配置参考,修改项目名和源文件即可使用:

cmake_minimum_required(VERSION 3.27)
project(YourProjectName)

# 指定交叉编译目标为Windows
set(CMAKE_SYSTEM_NAME Windows)
set(CMAKE_C_COMPILER x86_64-w64-mingw32-gcc)
set(CMAKE_CXX_COMPILER x86_64-w64-mingw32-g++)
set(CMAKE_RC_COMPILER x86_64-w64-mingw32-windres)

# CUDA相关配置
enable_language(CUDA)
set(CMAKE_CUDA_COMPILER nvcc)
set(CUDA_TOOLKIT_ROOT_DIR /opt/cuda-win64/)
set(CMAKE_CUDA_ARCHITECTURES 86) # 根据你的GPU型号修改
set(CMAKE_CUDA_FLAGS "${CMAKE_CUDA_FLAGS} --compiler-bindir=/usr/x86_64-w64-mingw32/bin")
set(CMAKE_CUDA_HOST_COMPILER /usr/bin/x86_64-w64-mingw32-g++)

# 查找SFML和TGUI依赖
find_package(SFML 2.5 COMPONENTS system window graphics REQUIRED)
find_package(TGUI 0.10 REQUIRED)

# 添加可执行文件,包含CUDA源码
add_executable(YourProjectName main.cpp your_cuda_kernel.cu)

# 链接所有依赖库
target_link_libraries(YourProjectName PRIVATE 
    sfml-system sfml-window sfml-graphics
    TGUI::TGUI
    cudart
)

五、部署与验证

  • 编译完成后,.exe文件位于构建目录的Release(或Debug)文件夹中
  • 收集所有依赖的.dll:SFML、TGUI的.dll(从/usr/x86_64-w64-mingw32/bin/查找)、CUDA的cudart64_12.dll,以及mingw运行时.dll(如libstdc++-6.dll、libgcc_s_seh-1.dll)
  • 将.exe和所有.dll放在同一目录,即可在Windows系统上运行

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 04:37:32