Windows下编译Skia出现x64与x86机器类型冲突错误如何解决
问题原因
该错误属于架构不匹配问题:你在gn参数中指定了生成64位(x64)的Skia库,但构建过程中调用的链接器加载了32位(x86)版本的MSVC标准库,两者架构冲突导致链接失败。
具体触发点有两个:
- Visual Studio 2019自带的Clang工具集根目录下的
bin文件夹默认存放的是32位的clang、lld-link程序,你配置的clang_win参数指向了Llvm根目录,构建工具调用了32位的链接器 - 你执行构建命令的终端如果是默认的32位VS开发者命令提示符,环境变量中的标准库搜索路径默认指向32位库目录,进一步导致链接器加载了错误架构的标准库
解决步骤
- 先删除之前生成的错误构建目录
out/Shared,避免旧配置缓存影响新构建 - 确认你使用的是x64 本机VS 2019开发者命令提示符执行后续操作,不要使用默认的32位版本终端
- 修改gn配置命令中的
clang_win参数,将路径指向64位Clang的根目录,即在原路径末尾添加\x64,修改后的完整配置命令如下:
bin/gn gen out/Shared --args='clang_win="C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Tools\Llvm\x64" is_component_build=true is_debug=false is_official_build=true skia_use_system_expat=false skia_use_system_libjpeg_turbo=false skia_use_system_libpng=false skia_use_system_libwebp=false skia_use_system_zlib=false skia_use_system_icu=false skia_use_system_harfbuzz=false target_cpu="x64"'
- 配置完成后,重新执行
ninja -C out/Shared命令即可正常构建。
如果你的Visual Studio安装在非默认路径,对应调整clang_win的参数值到你的VS安装路径下的VC\Tools\Llvm\x64目录即可。
内容的提问来源于stack exchange,提问作者user1466885
相关产品推荐
相关产品推荐

