System Requirements
Building Arrow C++ requires:- A C++20-enabled compiler (gcc 12+ on Linux)
- CMake 3.25 or higher
makeorninjabuild utilities on Linux/macOS- At least 1GB RAM for minimal builds, 4GB for debug builds with tests, 8GB for full builds
Installing Dependencies
Building with CMake Presets
CMake presets (available in CMake 3.21+) provide preconfigured build configurations for common use cases.ninja-debug-minimal - Debug build without optional featuresninja-debug-basic - Debug build with tests and reduced dependenciesninja-debug - Debug build with tests and more optional componentsninja-release-minimal - Release build with minimal featuresninja-release - Full release buildManual Configuration
For more control over the build, use manual CMake configuration.Build Types
- Debug: No optimizations, includes debugging symbols (
-DCMAKE_BUILD_TYPE=Debug) - Release: Optimizations enabled, no debug info (default)
- RelWithDebInfo: Optimizations with debug info (
-DCMAKE_BUILD_TYPE=RelWithDebInfo)
Optional Components
Enable specific Arrow features by adding CMake flags:Core Components
| Option | Description |
|---|---|
ARROW_COMPUTE | Computational kernel functions |
ARROW_CSV | CSV reader module |
ARROW_DATASET | Dataset API (implies Filesystem API) |
ARROW_FILESYSTEM | Local and remote filesystem access |
ARROW_FLIGHT | Arrow Flight RPC system |
ARROW_GANDIVA | Expression compiler (requires LLVM) |
ARROW_PARQUET | Apache Parquet support |
ARROW_JSON | JSON reader module |
ARROW_ORC | Apache ORC integration |
ARROW_S3 | Amazon S3 filesystem support |
ARROW_GCS | Google Cloud Storage support |
Compression Libraries
| Option | Description |
|---|---|
ARROW_WITH_BROTLI | Brotli compression |
ARROW_WITH_BZ2 | BZ2 compression |
ARROW_WITH_LZ4 | LZ4 compression |
ARROW_WITH_SNAPPY | Snappy compression |
ARROW_WITH_ZLIB | Zlib (gzip) compression |
ARROW_WITH_ZSTD | ZSTD compression |
Development Options
For development builds, enable additional targets:| Option | Description |
|---|---|
ARROW_BUILD_TESTS | Build unit tests |
ARROW_BUILD_BENCHMARKS | Build benchmarks |
ARROW_BUILD_EXAMPLES | Build API examples |
ARROW_BUILD_UTILITIES | Build command-line utilities |
ARROW_EXTRA_ERROR_CONTEXT | Enhanced error messages with stack traces |
ARROW_FUZZING | Build fuzz testing targets |
Dependency Management
Arrow supports multiple methods for resolving dependencies:Override Individual Dependencies
You can override specific dependency sources:Common Build Issues
Locale errors during tests
Locale errors during tests
On some Linux distributions, set an explicit locale:
Libraries installed to lib64 instead of lib
Libraries installed to lib64 instead of lib
On multi-architecture Linux systems, specify:
Out of memory during compilation
Out of memory during compilation
Reduce parallel jobs or enable unity builds:
Conda interfering with dependencies
Conda interfering with dependencies
If conda is installed but not being used, explicitly disable:
Modular Build Targets
Build specific components instead of everything:Platform-Specific Notes
Windows
See the dedicated Windows build guide for Visual Studio and MSVC-specific instructions.macOS with Xcode
Generate an Xcode project for debugging:Next Steps
Python bindings
Build PyArrow with Arrow C++
R package
Build the Arrow R package
Development guide
Learn about C++ development workflows
Testing
Run tests and benchmarks