arrow parquet触发非法指令信号,如何使用Conan构建无AVX2支持的版本?
配置方法与排查方案
关闭AVX2支持/适配通用架构的Conan配置
- 首先在
conanfile.txt的[options]块新增对应配置,Arrow官方Conan包内置了SIMD指令集控制参数,两种配置方式二选一即可:
如果需要生成完全不依赖扩展指令集的通用二进制,可以将[options] arrow:shared=True arrow:parquet=True arrow:with_snappy=True # 方式一:直接禁用AVX2支持 arrow:with_avx2=False # 方式二:指定SIMD级别为Jenkins服务器支持的最高版本,可选值包括none/sse4_2/avx/avx2/avx512 arrow:simd_level=avxsimd_level设置为none,仅会损失部分运算性能。 - 调整构建命令,强制指定目标架构,避免编译器默认优化本地架构:
该命令会强制编译器生成兼容通用x86_64架构的二进制,不会自动启用本地设备支持的AVX2指令。CFLAGS="-march=x86-64" CXXFLAGS="-march=x86-64" conan install .. --build=arrow --settings arch=x86_64
其他需要排查的问题
- 检查Conan全局配置是否默认启用本地架构优化:执行
conan config get查看全局编译参数,若存在-march=native配置,需要在构建时手动覆盖或者全局删除该配置。 - 验证Arrow构建日志:执行构建命令时添加
-v参数输出详细日志,搜索AVX2关键字确认构建过程中AVX2检测结果为未启用,避免配置未生效。 - 排查依赖库的指令集兼容问题:确认Snappy等其他依赖库也没有使用AVX2指令编译,若依赖库是从Conan中心拉取的预编译包,也需要添加
--build=*参数全量从源码构建所有依赖,保证指令集统一。 - 排除其他指令集不兼容问题:除AVX2外,还需确认Jenkins服务器是否支持SSE4.2、BMI等Arrow可能默认启用的指令集,若存在不支持的指令集,需要在options中对应关闭。
内容的提问来源于stack exchange,提问作者JACH
相关产品推荐
相关产品推荐

