You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

macOS上用Clang交叉编译Windows x64(MSVC ABI)版SDL3静态库时,链接阶段出现_mm_setr_epi16未定义错误的咨询

macOS上用Clang交叉编译Windows x64(MSVC ABI)版SDL3静态库时,链接阶段出现_mm_setr_epi16未定义错误的咨询

问题背景

我正在Apple Silicon的macOS上,用LLVM Clang(目标MSVC ABI)、CMake+Conan 2交叉编译Windows x64的GUI可执行文件。原本编译链接都正常,但添加SDL3静态依赖(通过Conan构建)后,链接阶段出现了SSE intrinsic未定义的错误,想请教下问题出在哪个环节,以及怎么修复。

环境信息

主机与工具链

  • 主机系统:macOS(Apple Silicon,arm64)
  • 交叉编译目标:Windows x64
  • 核心工具链:
    • 编译器:clang++(未使用clang-cl)
    • 目标三元组:x86_64-pc-windows-msvc
    • 链接器:lld-link
    • CMake:自定义工具链文件windows-llvm.cmake
    • 包管理:Conan 2,使用明确的build/host双Profile

Conan配置与执行命令

  • Build Profile:macos
  • Host Profile:windows-x86_64-llvm
  • 安装命令:
conan install . \
  --profile:build=macos \
  --profile:host=windows-x86_64-llvm \
  --build=missing

CMake链接命令片段

clang++ --target=x86_64-pc-windows-msvc
  -nostartfiles -nostdlib
  -fuse-ld=lld-link
  -Xlinker /subsystem:windows
  -Xlinker /entry:WinMainCRTStartup
  CMakeFiles/hello_gui.dir/win-main.cpp.obj
  SDL3-static.lib
  -lkernel32 -luser32 -lgdi32 ...

链接错误详情

lld-link: error: undefined symbol: _mm_setr_epi16
>>> referenced by SDL3-static.lib(SDL_stb.c.obj):(stbi__idct_simd)

已尝试的解决方法

我已经通过CMake工具链文件全局添加了编译选项,显式启用SSE2(确保我的项目和SDL3都能生效):

add_compile_options(-msse2)

之后重新构建了SDL3和我的项目,但错误依然存在。

我的疑问与求助点

  1. x86_64架构本身应该默认支持SSE2,为什么_mm_setr_epi16还是未定义?
  2. 这个问题到底是:
    • 缺少某个编译器标志?
    • SDL3的构建选项配置问题?
    • Conan Profile的配置疏漏?
    • Clang+MSVC ABI交叉编译的已知问题?
  3. clang --target=x86_64-pc-windows-msvc(坚持不用clang-cl)的情况下,正确的最小修复方案是什么?

火山引擎 最新活动