Back to Arrow

Minimal C++ build example

cpp/examples/minimal_build/README.md

latest2.8 KB
Original Source
<!--- Licensed to the Apache Software Foundation (ASF) under one or more contributor license agreements. See the NOTICE file distributed with this work for additional information regarding copyright ownership. The ASF licenses this file to you under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. -->

Minimal C++ build example

This directory showcases a minimal build of Arrow C++ (in build_arrow.sh). This minimal build is then used by an example third-party C++ project using CMake logic to compile and link against the Arrow C++ library (in build_example.sh and CMakeLists.txt).

When run, the example executable reads a file named test.csv, displays its parsed contents, and then saves them in Arrow IPC format in a file named test.arrow.

Running the example

You can run this simple example using Docker Compose and the given compose.yaml and dockerfiles, which installs a minimal Ubuntu image with a basic C++ toolchain.

Just open a terminal in this directory and run the following commands:

bash
docker compose run --rm minimal

Note that this example mounts two volumes inside the Docker image:

  • /arrow points to the Arrow source tree
  • /io points to this example directory

Statically-linked builds

We've provided an example build configuration here with CMake to show how to create a statically-linked executable with bundled dependencies.

To run it on Linux, you can use the above Docker image:

bash
docker compose run --rm static

On macOS, you can use the run_static.sh but you must set some environment variables to point the script to your Arrow checkout, for example:

bash
export ARROW_DIR=path/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.sh

On Windows, you can run run_static.bat from the command prompt with Visual Studio's command line tools enabled and CMake and ninja build in the path:

call run_static.bat

Static linking against system libraries

You can also use static libraries of Arrow's dependencies from the system. To run this configuration, set ARROW_DEPENDENCY_SOURCE=SYSTEM for run_static.sh. You can use docker compose for this too:

bash
docker compose run --rm static-system-dependency