Apache Arrow C++ 最小化 CMake 构建实战:从第三方项目编译与链接 Arrow

发布时间:2026/9/23 2:47:27

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),仅供参考
延伸阅读

更多相关文章

2026/9/23 2:42:26

泉州卫生间渗水补漏电话|不砸砖防水修复参考|欧米到家咨询电话

📝 文章简介泉州住宅、商铺和办公场所常见的漏水问题,包括卫生间渗水、阳台积水、屋顶漏水、外墙返潮、厨房墙面发霉、窗边渗水、地下室潮湿等。欧米到家提供泉州多区域防水补漏、漏水点排查、局部修补、卫浴及水电相关维修服务。遇到雨后渗水、墙顶水印…

2026/9/23 2:42:26

泉州屋顶漏水维修电话|防水卷材破损上门处理|欧米到家报修热线

📝 文章简介泉州住宅、商铺和办公场所常见的漏水问题,包括卫生间渗水、阳台积水、屋顶漏水、外墙返潮、厨房墙面发霉、窗边渗水、地下室潮湿等。欧米到家提供泉州多区域防水补漏、漏水点排查、局部修补、卫浴及水电相关维修服务。遇到雨后渗水、墙顶水印…

2026/9/23 2:42:26

泉州防水补漏上门电话|本地师傅勘查漏水位置|欧米到家服务电话

📝 文章简介泉州住宅、商铺和办公场所常见的漏水问题,包括卫生间渗水、阳台积水、屋顶漏水、外墙返潮、厨房墙面发霉、窗边渗水、地下室潮湿等。欧米到家提供泉州多区域防水补漏、漏水点排查、局部修补、卫浴及水电相关维修服务。遇到雨后渗水、墙顶水印…

2026/9/23 5:12:34

GPT与Codex关系解析:从注册到API接入的完整使用教程

1. 从零理解 GPT 与 Codex 的真实关系很多人第一次接触这两个词的时候,脑子里是一团浆糊的。GPT 和 Codex 到底是什么关系?是同一个东西的两个名字,还是两个完全独立的产品?这个问题不搞清楚,后面所有的操作都会走弯路…

2026/9/23 5:12:34

从SKILL.md到脚本:如何把安全审计做成AI Agent技能包

最近半年,AI Agent 圈子里最火的一个词就是 skill。Claude、Codex、OpenCode 这些工具先后都加入了 skill 机制,GitHub 上也冒出来一堆"技能库",里面全是别人写好的 SKILL.md。说实话,一开始我并不太理解这玩意和普通的…

2026/9/23 5:12:34

Chinese-CLIP中文图文检索系统:CPU本地部署实战指南

简介:本资源是一份面向计算机视觉课程学习者与本科生的图文跨模态检索系统实践项目,聚焦Chinese-CLIP模型在中文场景下的实际应用,适用于期末大作业、课程设计及AI入门实战。压缩包共59个文件,含40个Python源码(涵盖ap…

2026/9/23 5:12:34

合同类别最佳实践:5类核心模式选型指南与避坑详解

合同类别最佳实践:5类核心模式选型指南与避坑详解 配置环境就卡半天,往往不是因为你手慢,而是因为你没搞懂底层逻辑。很多团队在微服务架构中处理合同数据时,习惯性地堆砌业务逻辑,导致代码耦合严重,一旦需求变更,改一行代码就得排查三个模块。这种“…

2026/9/23 5:07:33

告别配置噩梦:用Python写个提前还款计算器,性能优化实操

告别配置噩梦:用Python写个提前还款计算器,性能优化实操 装库报错、路径冲突、环境版本打架,是不是每次搞点开发配置环境就卡半天?这种痛苦我懂。其实很多工具类小项目,根本不需要复杂的工程化结构,核心逻辑一旦跑通,剩下的就是 性能优化…

2026/9/22 10:02:42

GAMP 5 基于风险的计算机化系统验证:软件分类与审计追踪实践

简介:《A Risk-Based Approach to Compliant GxP Computerized Systems》即业内熟知的GAMP 5指南,面向制药企业质量与IT合规人员、验证工程师及计算机化系统管理者,用于解决GxP法规环境下系统合规性难以科学落地的问题。文档以风险管理为主线…

2026/9/22 9:07:39

安全托管MSSP实战:从静态防御到人机协同的攻防运营与应急响应

简介:这份PPT围绕互联网业务安全托管服务展开,面向企业安全负责人、IT运维人员及关注MSSP/MSS选型的读者,重点回应传统安全过度依赖人工、碎片化静态防御难以对抗产业化攻击等痛点。资源共1个pptx文件,包体约30.63MB,以…

2026/9/23 0:01:54

3个实战技巧搞定形式英语:从看教程到跑通性能优化

3个实战技巧搞定形式英语:从看教程到跑通性能优化 看了一堆教程还是不会写项目?别慌,这种“眼高手低”的困境在开发者圈子里太常见了。很多人以为卡点在语法,其实真正拦路虎是缺乏将知识点串联成完整链路的能力。今天咱们不聊虚的,直接拿【形式英语】这…

2026/9/22 16:34:32

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/22 20:01:30

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/22 13:25:41

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码