首页/新闻资讯/正文详情

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

发布时间:2026/9/23 2:47:29 来源:云帆数科 栏目:资讯中心
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:47:23

Gel 标准库 sequence 类型:自增序列的声明、推进、重置与并发语义
Gel 标准库 sequence 类型:自增序列的声明、推进、重置与并发语义

Gel 标准库 sequence 类型:自增序列的声明、推进、重置与并发语义 【免费下载链接】edgedb Gel supercharges Postgres with a modern data model, graph queries, Auth & AI solutions, and much more. 项目地址: https://gitcode.com/gh_mirrors/ed/edgedb … · 2026/9/23 2:47:23

wp-calypso React Query 迁移实战:Mutation(增删改)的完整实现与最佳实践
wp-calypso React Query 迁移实战:Mutation(增删改)的完整实现与最佳实践

wp-calypso React Query 迁移实战:Mutation(增删改)的完整实现与最佳实践 【免费下载链接】wp-calypso The JavaScript and API powered WordPress.com 项目地址: https://gitcode.com/gh_mirrors/wp/wp-calypso 本指南基于 wp-calyps… · 2026/9/23 2:47:23

AI痕迹太重?四层去痕法让文章自然如真人写作
AI痕迹太重?四层去痕法让文章自然如真人写作

写作者最头疼的一个场景,大概就是你辛辛苦苦用AI写了篇文章,回头自己读一遍,越读越别扭——句子全对,逻辑没毛病,但就是一股“机器味”,一眼假。这种情况我太熟了。这两年我不管写公众号、改工作报告&#… · 2026/9/23 3:34:50

语言代理如何学会“攒经验”?ELAE早期经验机制详解与落地实践
语言代理如何学会“攒经验”?ELAE早期经验机制详解与落地实践

不用急着去调参,也别急着上复杂业务,最近Meta放出的Agent Learning via Early Experience(ELAE)研究思路,值得每一个做语言代理应用的人停下来想一想:我们是不是一直没教会智能体“学习”,只是让… · 2026/9/23 3:34:50

脸上雀斑怎么去除速查手册:3个致命坑让你代码跑不通
脸上雀斑怎么去除速查手册:3个致命坑让你代码跑不通

脸上雀斑怎么去除速查手册:3个致命坑让你代码跑不通 刚把网上那段“脸上雀斑怎么去除”的Python脚本复制下来,双击运行,终端直接报 ModuleNotFoundError… · 2026/9/23 3:34:50

MATLAB纯CNN水域分割实战:从零手搭6层网络与像素级评估
MATLAB纯CNN水域分割实战:从零手搭6层网络与像素级评估

简介:本资源是一套面向本硕博及教研人员的MATLAB实践型学习材料,聚焦卷积神经网络(CNN)在遥感或水体监测图像分割任务中的落地实现,解决水域区域精准识别与算法可视化验证问题。压缩包共64个文件,含39个核心… · 2026/9/23 3:34:50

3分钟看懂譬如的意思源码解析与避坑
3分钟看懂譬如的意思源码解析与避坑

3分钟看懂譬如的意思源码解析与避坑 版本升级后 API 全变了,这种崩溃感谁懂?很多应届生在重构旧项目时,发现原本熟悉的函数签名彻底消失,文档也没更新。这时候,光看表面报错没用,得直接钻进去看 源码解析… · 2026/9/23 3:34:43

Swift 应用入口点演进:SE-0383 弃用 @UIApplicationMain 与 @NSApplicationMain,全面迁移到 @main
Swift 应用入口点演进:SE-0383 弃用 @UIApplicationMain 与 @NSApplicationMain,全面迁移到 @main

文档 【免费下载链接】swift-evolution This maintains proposals for changes and user-visible enhancements to the Swift Programming Language. 项目地址: https://gitcode.com/gh_mirrors/sw/swift-evolution 点击查看 免费下载 导读 本文基于 swift-evolut… · 2026/9/23 3:34:43

3招搞定手机怎么下载微信面试难题实战项目解析
3招搞定手机怎么下载微信面试难题实战项目解析

3招搞定手机怎么下载微信面试难题实战项目解析 面试被问“手机怎么下载微信”背后的原理,90%的人答不上来。别笑,这看似弱智的问题,实则是考察你对移动应用分发机制、安全校验及网络协议理解的试金石。我带过不少校招新人,他们背了八股文,却连一个A… · 2026/9/23 0:00:03

你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型
你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型

你有新短消息请注意查收:3个新手避坑指南搞定消息系统选型 面试被问“高并发下如何保证消息不丢失”,你张口就是“用Redis”,结果面试官追问“如果Redis宕机了怎么办”,你瞬间卡壳。这种场景太常见了,很多新手在背八股文时,只记住了技术名词… · 2026/9/23 0:00:29

Win7无线热点配置工具源码解析:解决API失效的3个实战技巧
Win7无线热点配置工具源码解析:解决API失效的3个实战技巧

Win7无线热点配置工具源码解析:解决API失效的3个实战技巧 Win7无线热点配置工具在Win10/11上跑不动?不是你的问题,是版本升级后 API 全变了。很多老项目里的 netsh wlan… · 2026/9/23 0:00:36

了解更多?预约专属演示

我们的顾问将为您一对一讲解产品与方案

企业微信二维码