Apache OpenDAL™ C++ Binding
The C++ binding for Apache OpenDAL™
Loading...
Searching...
No Matches
Apache OpenDAL™ C++ Binding

status: unreleased

A C++ binding for OpenDAL, providing access to S3, GCS, Azure Blob, HDFS, the local filesystem, and 50+ more services through one API.

Note: This binding is experimental/WIP. Only Clang and AppleClang are currently supported. The API may change without notice.

Note: This binding has its own independent version number. When checking compatibility, refer to this binding's version, not the Rust core version.

Useful Links

Integration via CMake

FetchContent

include(FetchContent)
FetchContent_Declare(
opendal-cpp
GIT_REPOSITORY https://github.com/apache/opendal.git
GIT_TAG v0.40.0
SOURCE_SUBDIR bindings/cpp
)
FetchContent_MakeAvailable(opendal-cpp)
target_link_libraries(your_target opendal_cpp)

Vendored source

mkdir third_party && cd third_party
git clone https://github.com/apache/opendal.git
cd opendal && git checkout v0.40.0
add_subdirectory(third_party/opendal/bindings/cpp)
target_link_libraries(your_target opendal_cpp)

Prerequisites

  • CMake ≥ 3.22
  • Clang or AppleClang with C++17 support (C++20 required for async)

Build

mkdir build && cd build
cmake -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ ..
make

CMake options

Option Default Description
OPENDAL_DEV OFF Enable all development options at once
OPENDAL_FEATURES "" Comma-separated list of services, e.g. "opendal/services-s3"
OPENDAL_ENABLE_ASYNC OFF Enable async API (requires C++20)
OPENDAL_ENABLE_TESTING OFF Build and enable tests
OPENDAL_ENABLE_DOCUMENTATION OFF Build Doxygen docs
OPENDAL_ENABLE_ADDRESS_SANITIZER OFF Enable address sanitizer

Example

#include "opendal.hpp"
#include <iostream>
int main() {
// Construct an operator. The second argument is a config map.
opendal::Operator op("memory");
// Write, read, stat.
op.Write("hello.txt", "Hello, OpenDAL!");
std::string data = op.Read("hello.txt");
std::cout << data << "\n";
opendal::Metadata meta = op.Stat("hello.txt");
std::cout << "size=" << meta.ContentLength() << "\n";
}
The metadata of a file or directory.
Definition data_structure.hpp:49
std::uint64_t ContentLength() const
Content length in bytes.
Definition data_structure.hpp:107
Operator is the entry for all public APIs.
Definition opendal.hpp:47

See the user guide for more examples including streaming reads, directory listing, real backends, and the async API.

Contributing

See CONTRIBUTING.md at the repository root.

License and Trademarks

Licensed under the Apache License, Version 2.0: http://www.apache.org/licenses/LICENSE-2.0

Apache OpenDAL, OpenDAL, and Apache are either registered trademarks or trademarks of the Apache Software Foundation.