使用Intel LLVM编译器(icx)编译Wine时出现mathcalls.h未知类型错误
使用Intel LLVM编译器(icx)编译Wine时出现mathcalls.h未知类型错误
我之前编译Wine的时候也碰到过一模一样的错误,这基本是Intel oneAPI编译器和系统自带头文件的兼容性冲突搞出来的问题。你看到的__DECL_SIMD___MS_hypot这个未知类型,是系统数学库相关的SIMD扩展声明,但Intel编译器的头文件没有正确识别或者定义它,导致编译时报错。
给你几个亲测有效的解决方向,你可以挨个试试:
强制系统头文件的优先级:Intel LLVM编译器默认会优先加载自己带的头文件,这会和系统的
math.h等文件冲突。编译时加上-idirafter /usr/include参数,让系统头文件在Intel头文件之后被正确解析,避免定义冲突。修改后的编译命令大概是这样:make CC=icx CXX=icpc CFLAGS="-idirafter /usr/include" CXXFLAGS="-idirafter /usr/include"你可以先单独编译出错的文件验证一下,比如:
icx -c dlls/win32u/bitmap.c -o bitmap.o -idirafter /usr/include如果这个命令能成功编译单个文件,那全局加这个参数就没问题。
禁用SIMD相关优化:有时候编译器的SIMD优化选项会和系统头文件的声明冲突,你可以尝试关闭SIMD支持,编译时加上
-fno-simd参数:make CC=icx CXX=icpc CFLAGS="-fno-simd" CXXFLAGS="-fno-simd"检查编译器版本兼容性:你用的是2025.1版本的Intel oneAPI,属于比较新的版本,可能存在和Wine代码或系统头文件的适配问题。可以试试降级到2024.x系列的稳定版本,或者去Wine的官方bug追踪平台看看有没有其他人报告过类似的适配问题,说不定已经有临时补丁了。
我当时是用第一个方法解决的,你可以根据自己的情况选择尝试,应该能搞定这个编译错误。
内容来源于stack exchange
相关产品推荐
相关产品推荐

