Win10(VS2019)编译Apache Arrow C++ Flight/minimal_build示例遇报错问询
故障根因与解决步骤
- 整体故障是连锁触发的:核心问题出在Arrow C++源码编译阶段,bundled依赖模式下构建lz4时抛出
%1 is not a valid Win32 application,直接中断ninja install流程,导致Arrow本体没有完成全量安装。后续Flight示例编译找不到ArrowConfig.cmake等CMake配置文件、逐个修完包路径又触发下一个包报错,都是Arrow本体未安装完成引发的连带问题。
1. 修复lz4构建环节的Win32报错
这个报错本质是Windows环境下编译架构不匹配:bundled模式自动拉取的lz4二进制/编译目标,和当前VS2019选定的编译平台(x64/x86)不一致,无法直接执行。
- 不要全程依赖BUNDLED源拉取lz4、zstd、snappy等压缩类依赖,先手动安装和当前编译架构完全匹配的对应依赖包,安装时确认包内附带完整的CMake配置文件(如
lz4Config.cmake) - 执行Arrow C++编译配置时,把上述压缩依赖的来源从BUNDLED切换为SYSTEM,通过CMake参数显式指定本地依赖路径,示例参数:
-Dlz4_ROOT=本地lz4安装路径 -Dzstd_ROOT=本地zstd安装路径 -Dsnappy_ROOT=本地snappy安装路径 - 确认静态编译、功能组件(COMPUTE、CSV、DATASET、HDFS、Flight)的配置参数正确后,重新执行ninja、ninja install流程,待Arrow所有组件正常安装到指定目录后再进入示例编译环节
2. 修复Flight示例的CMake检索逻辑
不要逐个手动修正单个包的链接路径,容易出现连锁报错:
- 在minimal_build示例的CMakeLists.txt最顶部,强制指定Arrow的安装根目录作为优先检索路径:
set(CMAKE_PREFIX_PATH "本地Arrow安装根目录" CACHE PATH "Arrow install root" FORCE) - 因为采用静态编译模式,需要同步给示例CMake加上静态库关联配置:
-DARROW_STATIC=ON -DFlight_STATIC=ON,避免CMake自动匹配动态库版本的Arrow依赖 - 重新调用CMake生成VS2019工程,确认所有依赖包被正常检索到后再执行编译
内容的提问来源于stack exchange,提问作者AkshayM
相关产品推荐
相关产品推荐

