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和我的项目,但错误依然存在。
我的疑问与求助点
- x86_64架构本身应该默认支持SSE2,为什么
_mm_setr_epi16还是未定义? - 这个问题到底是:
- 缺少某个编译器标志?
- SDL3的构建选项配置问题?
- Conan Profile的配置疏漏?
- Clang+MSVC ABI交叉编译的已知问题?
- 用
clang --target=x86_64-pc-windows-msvc(坚持不用clang-cl)的情况下,正确的最小修复方案是什么?




