数据工程大数据序列化数据分析【免费下载链接】arrowApache Arrow is a multi-language toolbox for accelerated data interchange and in-memory processing项目地址https://gitcode.com/gh_mirrors/arrow13/arrow点击查看免费下载本文是基于 Apache Arrow 官方开发者文档整理的 Windows 平台 C 构建实战指南。围绕当前仓库 docs/source/developers/cpp/windows.rst 展开系统讲解在 Windows 上从零搭建 Arrow C 开发环境的方法如何初始化 Visual Studio 命令行环境、如何用 conda-forge 或 vcpkg 管理第三方依赖以及如何用 MSVC Solution、Ninja、NMake、MSYS2 等不同生成器完成 out-of-source 构建。读完本文你将掌握在 Windows 上编译、调试、静态链接 Arrow C 库并复现 CI 构建的全套方法并理解相关 CMake 选项在源码层的真实作用。系统环境准备Visual Studio 与命令行开发环境与 Linux 和 macOS 一样Arrow 的开发团队致力于让项目在 Windows 上通过 CMake「开箱即用」地完成构建——前提是你有一个可用的 C 编译工具链。微软提供了免费的Visual Studio Community版本包含 MSVC 编译器和构建工具。在命令行cmd.exe / PowerShell中做开发时每次新开一个 shell 都必须重新初始化 Visual Studio 的开发环境这会让cl.exe、nmake、ninja等工具进入 PATH并配置好环境变量。Visual Studio 2017 使用如下批处理脚本初始化x64 架构C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\Tools\VsDevCmd.bat -archamd64Visual Studio 2019 对应的脚本为C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\Common7\Tools\VsDevCmd.bat -archamd64注意新版 Visual Studio2019 及以后还提供位于VC\Auxiliary\Build\vcvarsall.bat的等价脚本例如C:\Program Files (x86)\Microsoft Visual Studio\2019\Community\VC\Auxiliary\Build\vcvarsall.bat amd64。当前仓库的 Windows CI 脚本 ci/appveyor-cpp-setup.bat 正是通过call vcvarsall.bat amd64来完成这一步的。此外可以配置 cmder 之类的控制台模拟器让它在每次启动新的开发控制台时自动执行上述初始化脚本省去手动输入。依赖管理方案一使用 conda-forge 获取构建依赖Miniconda是包含 conda 包管理器的精简版 Python 发行版。Apache Arrow 社区的成员长期参与维护conda-forge——一个由社区维护的跨平台 conda 软件包仓库。Arrow 在 Windows 上的 CI 也大量依赖 conda 提供预编译依赖。使用 conda-forge 作为 C 构建依赖来源的步骤如下从 Miniconda 官网下载并安装 64 位发行版打开命令提示符cmd.exe先执行上文所述的环境初始化脚本vcvarsall.bat或VsDevCmd.bat将 conda-forge 设为默认 channelconda config --add channels conda-forge在 Arrow 代码库根目录下基于仓库提供的 ci/conda_env_cpp.txt 创建独立构建环境conda create -y -n arrow-dev --fileci\conda_env_cpp.txt激活该环境activate arrow-dev环境激活后Arrow 的构建系统会自动检测到%CONDA_PREFIX%环境变量并以此为依赖解析根目录。这等价于显式传入两个 CMake 参数-DARROW_DEPENDENCY_SOURCESYSTEM ^ -DARROW_PACKAGE_PREFIX%CONDA_PREFIX%\Library从源码层面看这一自动探测逻辑位于 cpp/cmake_modules/DefineOptions.cmake当CONDA_PREFIX环境变量非空时ARROW_DEPENDENCY_SOURCE的默认值会被设为CONDA而 cpp/cmake_modules/ThirdpartyToolchain.cmake 会在该模式下将ARROW_PACKAGE_PREFIX指向%CONDA_PREFIX%\LibraryWindows 下 conda 的Library目录存放头文件与导入库并据此批量设置各依赖的*_ROOT变量。激活 conda 环境后可以直接在同一个命令行里通过devenv启动 Visual Studio IDEIDE 会继承当前环境的所有变量。几点重要提醒conda 安装的依赖包是Release 模式编译的无法与 Debug 构建链接。如果打算使用-DCMAKE_BUILD_TYPEdebug则必须从源码自行编译这些依赖。-DCMAKE_BUILD_TYPErelwithdebinfo是另一种可用选项它产出的构建既能与 Release 库链接又保留可调试信息。如果使用 conda 包遇到问题最常见的原因是混用了defaultschannel 与conda-forgechannel 的包。可以用conda list查看当前环境中已安装的包及其来源。依赖管理方案二使用 vcpkg 获取构建依赖vcpkg是微软开源的 C/C 包管理器托管社区贡献的 C/C 库及其依赖的 ports。Arrow 在仓库根目录提供了 manifest 文件 cpp/vcpkg.json声明了构建 C 库所需的全部 vcpkg 包包括 abseil、aws-sdk-cpp、boost 系列、brotli、bzip2、c-ares、curl、flatbuffers、gflags、glog、google-cloud-cpp、grpc、gtest、lz4、openssl、orc、protobuf、rapidjson、re2、snappy、sqlite3、thrift、utf8proc、xsimd、zlib、zstd 等并通过builtin-baseline与overrides如固定 gtest 1.10.0锁定版本行为。使用 vcpkg 的步骤如下先安装并集成 vcpkg 本身在cmd.exe中切换工作目录到 Arrow 根目录执行vcpkg install ^ --triplet x64-windows ^ --x-manifest-root cpp ^ --feature-flagsversions ^ --clean-after-build其中--x-manifest-root cpp指向 manifest 文件所在目录即仓库的cpp子目录--clean-after-build在安装完成后清理构建中间文件。在 Windows 上vcpkg 默认构建动态链接库DLL如需静态库使用 tripletx64-windows-static。vcpkg 会下载源码包并在本地编译因此用 vcpkg 安装依赖比 conda 更耗时。然后在 cmake 命令中通过-DARROW_DEPENDENCY_SOURCEVCPKG让构建系统使用 vcpkg 安装的依赖。除该选项外还可以用以下变量覆盖 vcpkg 的默认 CMake 配置CMake 变量默认行为说明-DCMAKE_TOOLCHAIN_FILE自动查找 vcpkg 的 CMake 工具链文件vcpkg.cmake手动指定其位置-DVCPKG_TARGET_TRIPLET自动推断 vcpkg triplet手动指定 triplet如x64-windows-DARROW_DEPENDENCY_USE_SHAREDON设为OFF以使用静态库-DVCPKG_MANIFEST_MODEON设为OFF以忽略vcpkg.jsonmanifest仅使用 vcpkg 安装目录下已装好的包这些选项的底层逻辑集中在 cpp/cmake_modules/Usevcpkg.cmake该文件按「显式-DCMAKE_TOOLCHAIN_FILE→VCPKG_ROOT变量 →VCPKG_ROOT环境变量 →vcpkg.path.txt」的顺序定位 vcpkg 根目录若未指定VCPKG_TARGET_TRIPLET会从 vcpkg installed 目录下的子目录名自动推断当cpp/vcpkg.json存在且未显式关闭时VCPKG_MANIFEST_MODE会被自动置为ONVCPKG_LIBRARY_LINKAGE动态/静态则由ARROW_DEPENDENCY_USE_SHARED决定。最终ARROW_DEPENDENCY_SOURCE会被强制设为SYSTEM见 cpp/cmake_modules/Usevcpkg.cmake注释明确说明 VCPKG 在内部实现为 SYSTEM并预先为 Boost、OpenSSL、Thrift、ZSTD、Brotli、LZ4 等设置好指向 vcpkg 前缀的*_ROOT变量。使用 Visual StudioMSVCSolution 文件构建在cmd.exe中切换工作目录到 Arrow 根目录进行 out-of-source 构建先进入cpp子目录、创建build目录然后生成 MSVC 解决方案并编译cd cpp mkdir build cd build cmake .. -G Visual Studio 15 2017 -A x64 ^ -DARROW_BUILD_TESTSON cmake --build . --config Release-G Visual Studio 15 2017指定生成器对应 VS 2017-A x64指定目标平台为 64 位-DARROW_BUILD_TESTSON开启单元测试构建cmake --build . --config Release用 Release 配置编译解决方案。对于更新版本的 Visual Studio使用生成器名称Visual Studio 16 2019以及更新的Visual Studio 17 2022或运行cmake --help查看本机可用的生成器列表。使用 Ninja 与 sccache 构建Ninja构建系统提供了更好的构建并行度可选的sccache编译器缓存会记录过去的编译结果以避免重复编译机制与 Unix 下的ccache类似且同样适用于 MSVC。较新版本的 Visual Studio 已内置 Ninja。检查方法先运行环境初始化脚本vcvarsall.bat或VsDevCmd.bat再执行ninja --version。如果所用的 Visual Studio 版本没有内置 Ninja使用 conda 时激活arrow-dev环境后安装activate arrow-dev conda install -c conda-forge ninja不使用 conda 时从 Ninja 的预编译包渠道单独安装。安装完成后生成 Ninja 构建文件并编译注意-DGTest_SOURCEBUNDLED由于 Ninja 不生成 VS 解决方案GoogleTest 需要以内置源码形式参与构建cd cpp mkdir build cd build cmake -G Ninja ^ -DARROW_BUILD_TESTSON ^ -DGTest_SOURCEBUNDLED .. cmake --build . --config Release若要以本地存储模式启用sccache需在调用cmake之前设置SCCACHE_DIR环境变量... set SCCACHE_DIR%LOCALAPPDATA%\Mozilla\sccache cmake -G Ninja ^ ...使用 NMake 构建NMake 是随 Visual Studio 分发的经典 make 工具。在cmd.exe中切换到 Arrow 根目录并执行cd cpp mkdir build cd build cmake -G NMake Makefiles .. nmake注意 NMake 单线程执行构建速度通常慢于 Ninja该方式适合在没有 Ninja 的旧环境中应急使用。在 MSYS2 上构建MSYS2 提供了类 Unix 的终端环境。可以在MSYS2 终端、cmd.exe或PowerShell中进行构建。在 MSYS2 终端中cd cpp mkdir build cd build cmake -G MSYS Makefiles .. make在cmd.exe或 PowerShell 终端中可以直接使用下面的批处理脚本仓库目录下执行它配置好 MINGW64 环境后使用 MSYS Makefiles 生成器构建setlocal REM For 64bit set MINGW_PACKAGE_PREFIXmingw-w64-x86_64 set MINGW_PREFIXc:\msys64\mingw64 set MSYSTEMMINGW64 set PATH%MINGW_PREFIX%\bin;c:\msys64\usr\bin;%PATH% rmdir /S /Q cpp\build mkdir cpp\build pushd cpp\build cmake -G MSYS Makefiles .. || exit /B make || exit /B popdMSYS2 构建主要面向 MinGW-w64 工具链场景例如在 Windows 上模拟 Unix 构建环境或需要 GCC 而非 MSVC 的场景。在 Windows/ARM64 上使用 Ninja 与 Clang 构建对于 Windows on ARM64WoA64平台可以使用Ninja clang组合构建 Arrow 库cd cpp mkdir build cd build set CCclang-cl set CXXclang-cl cmake -G Ninja .. cmake --build . --config Release通过设置CCclang-cl、CXXclang-cl将编译器切换为 LLVM 的 MSVC 兼容前端Windows/ARM64 的 LLVM 工具链可从 LLVM 官方 release 页面下载由于 xsimd、boost 等依赖在 ARM64 上存在兼容性问题Visual StudioMSVC目前还不能用于编译 win/arm64 构建官方明确提示该构建仅为 WoA64 的实验性支持由于 CI 基础设施限制并非所有特性都经过充分测试。Debug 构建要构建 Arrow 的 Debug 版本需要预先安装Debug 版本的 Boost。推荐为 Debug 构建配置以下 CMake 变量-DARROW_BOOST_USE_SHAREDOFF启用与 boost debug 库的静态链接简化第三方库的运行时加载-DBOOST_ROOT设置 boost 库根目录可选-DBOOST_LIBRARYDIR设置包含 boost 库文件的目录可选。ARROW_BOOST_USE_SHARED的默认值由ARROW_DEPENDENCY_USE_SHARED决定默认ON定义于 cpp/cmake_modules/DefineOptions.cmake。在 Debug 模式下需要显式关闭共享链接以避免链接到 Release 版 Boost 库。Debug 模式构建命令行示例cd cpp mkdir build cd build cmake .. -G Visual Studio 15 2017 -A x64 ^ -DARROW_BOOST_USE_SHAREDOFF ^ -DCMAKE_BUILD_TYPEDebug ^ -DBOOST_ROOTC:/local/boost_1_63_0 ^ -DBOOST_LIBRARYDIRC:/local/boost_1_63_0/lib64-msvc-14.0 cmake --build . --config DebugWindows 依赖解析问题静态库后缀处理Windows 上无论静态还是动态链接依赖库都使用.lib文件因此静态库有时会被命名为形如%PACKAGE%_static.lib的独立名称以示区分。当静态链接某些依赖时Arrow 提供了专门的 CMake 选项来指定这些后缀-DBROTLI_MSVC_STATIC_LIB_SUFFIX%BROTLI_SUFFIX%-DSNAPPY_MSVC_STATIC_LIB_SUFFIX%SNAPPY_SUFFIX%-LZ4_MSVC_STATIC_LIB_SUFFIX%LZ4_SUFFIX%-ZSTD_MSVC_STATIC_LIB_SUFFIX%ZSTD_SUFFIX%这些选项在 cpp/cmake_modules/DefineOptions.cmake 中定义。例如 Snappy 在 MSVC 下默认使用_static后缀见 cpp/cmake_modules/DefineOptions.cmakeLZ4、ZSTD 的查找逻辑中同样在MSVC条件下默认追加_static见 cpp/cmake_modules/Findlz4Alt.cmake 与 cpp/cmake_modules/FindzstdAlt.cmake。当某个依赖的静态库命名不符合这些默认规则时就需要用上述变量显式指定后缀。获取最新的构建说明可以直接参考仓库中 Appveyor 自动化构建使用的脚本 ci/appveyor-cpp-build.bat其中展示了完整的 Windows 构建参数集。在 Windows 上静态链接 ArrowWindows 的静态库构建由 CMake 选项ARROW_BUILD_STATIC启用默认ON见 cpp/cmake_modules/DefineOptions.cmake产出的 Arrow 头文件使用预处理宏ARROW_STATIC来抑制符号的dllimport/dllexport标记。在 Windows 上静态链接 Arrow 的项目必须额外定义该宏Unix 构建不使用此宏。另外如果启用了-DARROW_FLIGHTON还需要定义ARROW_FLIGHT_STATIC同理-DARROW_FLIGHT_SQLON时需要定义ARROW_FLIGHT_SQL_STATIC。一个完整的 CMake 静态链接示例project(MyExample) find_package(Arrow REQUIRED) add_executable(my_example my_example.cc) target_link_libraries(my_example PRIVATE arrow_static arrow_flight_static arrow_flight_sql_static) target_compile_definitions(my_example PUBLIC ARROW_STATIC ARROW_FLIGHT_STATIC ARROW_FLIGHT_SQL_STATIC)下载时区数据库Windows 上运行部分 compute 单元测试前需要先下载IANA 时区数据库和Windows 时区映射表。下载方法可参考仓库脚本 ci/scripts/download_tz_database.sh该脚本从 IANA 下载tzdata压缩包并解压同时从 Unicode CLDR 项目下载windowsZones.xmlWindows 时区映射两者一同放入~/Downloads/tzdata目录。当前仓库的 Windows CI 脚本 ci/appveyor-cpp-setup.bat 也执行了完全相同的下载流程。若希望在运行单元测试时为时区数据库指定非默认路径设置ARROW_TIMEZONE_DATABASE环境变量即可。复现 Appveyor 构建对于更熟悉 Linux 开发、但需要在本机复现失败的 Appveyor 构建例如Static_Crt_Build任务的开发者以下是官方提供的复现笔记make unittest可能仍然会失败但绝大多数单元测试可以通过各自的独立 make target 构建出来准备虚拟机微软为「带 Visual Studio 的 Windows」提供了试用虚拟机下载并安装一个版本安装基础工具在虚拟机中安装 Git、CMake、Miniconda 或 Anaconda以下步骤假设 Anaconda并安装「Build Tools for Visual Studio」。安装向导中务必勾选C 工具链安装完成后重启安装预编译的 Boost Debug 二进制下载 Boost 预编译二进制并安装。在 Anaconda/Miniconda 命令提示符不要用 PowerShell中执行并先运行vcvarsall.bat x64。vcvarsall.bat的位置可能因版本而异例如 VS 2019 Build Tools 下通常是C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\VC\Auxiliary\Build\vcvarsall.bat。随后编译静态 Boost 库cd $EXTRACT_BOOST_DIRECTORY .\bootstrap.bat rem This is for static libraries needed for static_crt_build in appveyor .\b2 linkstatic --with-filesystem --with-regex --with-system install rem this should put libraries and headers in c:\Boost激活 Anaconda/Minicondarem this might differ for miniconda C:\Users\User\Anaconda3\Scripts\activate克隆代码并切换到 Arrow 源码目录可能需要先安装 git设置环境变量按要复现的 Appveyor 任务调整构建类型rem Change the build type based on which appveyor job you want. SET JOBStatic_Crt_Build SET GENERATORNinja SET APPVEYOR_BUILD_WORKER_IMAGEVisual Studio 2017 SET USE_CLCACHEfalse SET ARROW_BUILD_GANDIVAOFF SET ARROW_LLVM_VERSION8.0.* SET PYTHON3.9 SET ARCH64 SET PATHC:\Users\User\Anaconda3;C:\Users\User\Anaconda3\Scripts;C:\Users\User\Anaconda3\Library\bin;%PATH% SET BOOST_LIBRARYDIRC:\Boost\lib SET BOOST_ROOTC:\Boost运行 Appveyor 脚本conda install -c conda-forge --file .\ci\conda_env_cpp.txt .\ci\appveyor-cpp-setup.bat rem this might fail but at this point most unit tests should be buildable by there individual targets rem see next line for example. .\ci\appveyor-cpp-build.bat rem you can also just invoke cmake directly with the desired options cmake --build . --config Release --target arrow-compute-hash-test其中ci\conda_env_cpp.txt是仓库内维护的 conda 依赖清单见 ci/conda_env_cpp.txtappveyor-cpp-setup.bat负责下载时区数据库、配置 MinioS3 测试用等准备工作appveyor-cpp-build.bat则执行完整 CMake 配置与构建。如果脚本在某个环节失败也可以直接用cmake加所需选项单独构建某个测试目标例如上例中的arrow-compute-hash-test。小结在 Windows 上构建 Apache Arrow C 是一个「编译器环境初始化 依赖管理 生成器选择」的组合流程先用VsDevCmd.bat/vcvarsall.bat初始化 MSVC 环境再根据团队习惯从 conda-forge预编译、速度快与 vcpkgmanifest 化、版本可控中二选一管理依赖最后按需选择 MSVC Solution、Ninja配合 sccache 加速、NMake、MSYS2 或 ARM64 专属的 clang-cl 方案完成构建。调试场景记得为 Boost 准备 Debug 版并关闭共享链接静态链接场景则要定义ARROW_STATIC系列宏。本文所有命令均可直接在当前仓库中验证对应源码与 CI 脚本遇到问题时以 ci/appveyor-cpp-build.bat 中的完整参数集为权威参考。赞分享数据工程大数据序列化数据分析【免费下载链接】arrowApache Arrow is a multi-language toolbox for accelerated data interchange and in-memory processing项目地址https://gitcode.com/gh_mirrors/arrow13/arrow点击查看免费下载相关推荐在 Windows 上开发与构建 Apache Arrow C 库环境搭建、依赖管理与多构建方式完整指南在 Windows 上开发与构建 Apache Arrow C 库环境搭建、依赖管理与多构建方式完整指南 Apache Arrow 的 C 实现 c数据工程数据分析大数据从零构建 Apache Arrow CCMake 配置、依赖管理与调试实战指南从零构建 Apache Arrow CCMake 配置、依赖管理与调试实战指南 Apache Arrow C 是 Arrow 生态的底层计算引擎负责数据工程大数据序列化数据分析Apache Arrow C 构建完全指南CMake 配置、依赖管理与调试实践Apache Arrow C 构建完全指南CMake 配置、依赖管理与调试实践 本文以 Apache Arrow 官方开发者文档 Building Arr大数据数据分析数据工程序列化创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考