Apache Arrow C++ 最小化 CMake 构建实战:从第三方项目编译与链接 Arrow
数据工程数据分析大数据【免费下载链接】arrowApache Arrow is a multi-language toolbox for accelerated data interchange and in-memory processing项目地址https://gitcode.com/gh_mirrors/arrow12/arrow点击查看免费下载本指南以 Apache Arrow 源码树内cpp/examples/minimal_build/目录为线索系统讲解如何以最小化配置从源码构建 Arrow C 核心库并让一个独立的第三方 CMake 项目通过find_package(Arrow)编译、链接并运行。读完本文你将掌握 Arrow 最小构建所需的核心 CMake 开关、动态/静态链接两种集成方式以及基于 Docker 的一键复现流程可直接迁移到自己的项目中。示例目录结构与总体工作流在 Apache Arrow 仓库中cpp/examples/minimal_build/目录展示了一个最小构建 第三方项目集成的完整闭环build_arrow.sh以最小化 CMake 配置构建 Arrow C 库build_example.sh与CMakeLists.txt演示第三方 C 项目如何通过 CMake 逻辑编译并链接 Arrowexample.cc示例程序本体读取test.csv、打印解析结果并写入 Arrow IPC 格式文件test.arrowdocker-compose.yml、minimal.dockerfile、system_dependency.dockerfile、run.sh、run_static.sh、run_static.bat提供跨平台Linux/macOS/Windows的运行入口。总体工作流分为三步先构建并安装 Arrow 库再配置并编译第三方示例工程最后运行示例程序验证。更详细的说明可参考 minimal_build/README.md。用 Docker Compose 一键运行minimal_build目录内置了基于 Docker Compose 的运行方式镜像基于ubuntu:focal仅安装build-essential、cmake、pkg-config等最小工具链见 minimal.dockerfile。在示例目录下打开终端执行docker-compose run --rm minimal该命令会依次完成 Arrow 库构建、示例项目构建与运行。容器内挂载了两个卷见 docker-compose.yml/arrow指向整个 Arrow 源码树/io指向minimal_build示例目录本身。容器入口为/io/run.sh其内部设置了ARROW_BUILD_DIR/build/arrow与EXAMPLE_BUILD_DIR/build/example随后依次调用build_arrow.sh、build_example.sh并执行产物arrow-example见 run.sh。最小化构建 Arrow 库build_arrow.sh是理解 Arrow 最小构建的关键核心命令如下完整脚本见 build_arrow.shNPROC$(nproc) mkdir -p $ARROW_BUILD_DIR pushd $ARROW_BUILD_DIR # Enable the CSV reader as its used by the example third-party build cmake /arrow/cpp \ -DARROW_CSVON \ -DARROW_JEMALLOCOFF \ $ARROW_CMAKE_OPTIONS make -j$NPROC make install popd关键开关说明CMake 选项值作用ARROW_CSVON启用 CSV 读取器示例程序依赖它解析test.csv故必须打开ARROW_JEMALLOCOFF关闭 jemalloc 内存分配器缩小依赖面加快最小构建ARROW_CMAKE_OPTIONS透传允许在外部按需追加更多构建参数注意脚本默认不显式指定-DARROW_BUILD_SHARED因此动态库为默认产物安装后的 CMake 配置文件可供第三方项目通过find_package(Arrow)使用。第三方 CMake 项目如何接入 Arrow构建好 Arrow 后示例工程通过一份精简的CMakeLists.txt完成接入完整内容见 CMakeLists.txtcmake_minimum_required(VERSION 3.16) project(ArrowMinimalExample) option(ARROW_LINK_SHARED Link to the Arrow shared library ON) find_package(Arrow REQUIRED) if(NOT DEFINED CMAKE_CXX_STANDARD) set(CMAKE_CXX_STANDARD 17) endif() # We require a C17 compliant compiler set(CMAKE_CXX_STANDARD_REQUIRED ON) if(NOT DEFINED CMAKE_BUILD_TYPE) set(CMAKE_BUILD_TYPE Release) endif() message(STATUS Arrow version: ${ARROW_VERSION}) message(STATUS Arrow SO version: ${ARROW_FULL_SO_VERSION}) add_executable(arrow-example example.cc) if(ARROW_LINK_SHARED) target_link_libraries(arrow-example PRIVATE Arrow::arrow_shared) else() target_link_libraries(arrow-example PRIVATE Arrow::arrow_static) endif()这段配置揭示了四个要点find_package(Arrow REQUIRED)依赖 Arrow 安装时导出的 CMake 包要求 Arrow 已通过make install安装到 CMake 可发现路径Arrow 提供Arrow::arrow_shared与Arrow::arrow_static两个导入目标分别对应动态与静态链接由ARROW_LINK_SHARED开关选择项目要求 C17 编译器CMAKE_CXX_STANDARD 17且CMAKE_CXX_STANDARD_REQUIRED ONArrow 18.x 的 C 实现以 C17 为基线构建期间会打印ARROW_VERSION与ARROW_FULL_SO_VERSION便于确认链接到的 Arrow 版本。build_example.sh对应的构建命令为见 build_example.shmkdir -p $EXAMPLE_BUILD_DIR pushd $EXAMPLE_BUILD_DIR cmake /io make popd示例程序CSV 读取与 IPC 写出example.cc演示了 Arrow C 中最典型的读-处理-写链路完整代码见 example.cc包含四个环节打开 CSV 文件通过arrow::io::ReadableFile::Open(csv_filename)以只读方式打开test.csv构建 CSV 读取器用arrow::csv::TableReader::Make配合ReadOptions::Defaults()、ParseOptions::Defaults()、ConvertOptions::Defaults()三组默认选项创建读取器读取并打印调用csv_reader-Read()得到arrow::Table再用arrow::PrettyPrint将表内容格式化输出到标准错误流写入 IPC 文件用arrow::io::FileOutputStream::Open打开test.arrow经arrow::ipc::MakeFileWriter创建写入器调用WriteTable写入整个表并Close关闭。错误处理统一采用ARROW_ASSIGN_OR_RAISE与ARROW_RETURN_NOT_OK宏前者将arrow::ResultT的值解包给变量失败即提前返回Status后者在Status非 OK 时直接返回。main函数检查Status并在失败时打印错误、返回退出码 1。配套的测试数据 test.csv 内容如下Integers,Strings,Timestamps 1,Some,2018-11-13 17:11:10 2,data,N/A运行时程序会打印* Reading CSV file test.csv into table、* Read table:、* Writing table into Arrow IPC file test.arrow等进度信息然后输出解析出的表格并在当前目录生成test.arrow文件。静态链接构建与 pkg-config 集成除动态链接外示例还提供了完整的静态链接配置run_static.sh通过如下 CMake 参数构建 Arrow完整脚本见 run_static.shcmake $ARROW_DIR/cpp \ -DARROW_BUILD_SHAREDOFF \ -DARROW_BUILD_STATICON \ -DARROW_CSVON \ -DARROW_DEPENDENCY_SOURCE${ARROW_DEPENDENCY_SOURCE} \ -DARROW_DEPENDENCY_USE_SHAREDOFF \ -Dxsimd_SOURCEBUNDLED \ $ARROW_CMAKE_OPTIONS其中ARROW_DEPENDENCY_SOURCE默认取BUNDLED由: ${ARROW_DEPENDENCY_SOURCE:BUNDLED}设定表示第三方依赖随 Arrow 一起构建随后以cmake $EXAMPLE_DIR -DARROW_LINK_SHAREDOFF编译示例工程即可得到静态链接的可执行文件。run_static.sh还额外演示了pkg-config 集成方式跳过 CMake直接用编译器命令链接${CXX:-c} -stdc17 \ -o $EXAMPLE_BUILD_DIR/arrow-example \ $EXAMPLE_DIR/example.cc \ $(PKG_CONFIG_PATH$ARROW_BUILD_DIR/lib/pkgconfig \ pkg-config --cflags --libs --static arrow)即通过PKG_CONFIG_PATH指向 Arrow 安装目录下的pkgconfig目录再让pkg-config --cflags --libs --static arrow输出编译与静态链接所需的全部参数。在 Linux 上可通过 Docker 直接运行静态构建docker-compose run --rm static针对系统依赖的静态链接若希望 Arrow 的依赖使用系统预装库而非随构建捆绑可将ARROW_DEPENDENCY_SOURCE设为SYSTEM再运行run_static.sh。docker-compose.yml为此提供了现成服务docker-compose run --rm static-system-dependency该服务使用 system_dependency.dockerfile 构建镜像并通过environment: ARROW_DEPENDENCY_SOURCE: SYSTEM注入配置。相比最小镜像该镜像额外安装了libboost-filesystem-dev、libprotobuf-dev、libsnappy-dev、libzstd-dev、rapidjson-dev等一系列 Arrow 依赖的系统开发包保证以 SYSTEM 模式静态构建时依赖可被找到。macOS 与 Windows 上的静态构建macOS设置以下环境变量后执行run_static.sh即可变量使脚本定位到 Arrow 检出目录与示例目录并将构建产物放到当前目录下export ARROW_DIRpath/to/arrow-clone export EXAMPLE_DIR$ARROW_DIR/cpp/examples/minimal_build export ARROW_BUILD_DIR$(pwd)/arrow-build export EXAMPLE_BUILD_DIR$(pwd)/example ./run_static.shWindows在 Visual Studio 命令行工具环境中且cmake与 ninja 已在 PATH 中执行call run_static.batrun_static.bat与run_static.sh逻辑对应覆盖了 Arrow 构建、示例工程构建及运行的全流程。小结cpp/examples/minimal_build/是一份可复制的最小接入样板其核心思路可归纳为三点最小构建以-DARROW_CSVON -DARROW_JEMALLOCOFF等少量开关裁剪 Arrow获得足够支撑业务的最小库标准 CMake 集成通过find_package(Arrow)与Arrow::arrow_shared/Arrow::arrow_static目标让第三方项目以声明式方式接入多形态交付同一份示例覆盖了 Docker 一键复现、静态链接、pkg-config 集成以及 macOS/Windows 原生构建可作为 CI 或交付流水线的参考蓝本。若需进一步扩展仓库还提供包含 Parquet、Dataset、Flight 等能力的完整示例见 cpp/examples/arrow 与 cpp/examples/tutorial_examples可作为从最小构建走向生产级集成的下一步参考。赞分享数据工程数据分析大数据【免费下载链接】arrowApache Arrow is a multi-language toolbox for accelerated data interchange and in-memory processing项目地址https://gitcode.com/gh_mirrors/arrow12/arrow点击查看免费下载相关推荐Apache Arrow C 最小化 CMake 构建与第三方项目链接实战指南Apache Arrow C 最小化 CMake 构建与第三方项目链接实战指南 本文围绕 Apache Arrow 官方文档 cmake_minimal_b大数据数据分析数据工程序列化Apache Arrow C 最小构建实战从构建精简库到 CMake 集成第三方项目Apache Arrow C 最小构建实战从构建精简库到 CMake 集成第三方项目 本文以 Apache Arrow 仓库中的 cpp/examples大数据数据分析数据工程序列化Apache Arrow C 最小化构建与第三方项目集成指南从零编译到 CSV 转 IPC 实战Apache Arrow C 最小化构建与第三方项目集成指南从零编译到 CSV 转 IPC 实战 Apache Arrow 的 C 核心库Arrow数据工程大数据序列化数据分析创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考