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.
We release the OpenDAL C++ binding independently of the
opendal crate (Rust core). For updates
and compatibility, use the C++ binding version instead of the opendal crate
version.
- User guide: opendal.apache.org/docs/bindings/cpp
- Services & configuration: opendal.apache.org/services
- Source:
bindings/cpp/ - Examples:
examples/cpp/
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)mkdir third_party && cd third_party
git clone https://github.com/apache/opendal.git
cd opendal && git checkout v0.40.0add_subdirectory(third_party/opendal/bindings/cpp)
target_link_libraries(your_target opendal_cpp)- CMake ≥ 3.22
- Clang or AppleClang with C++17 support (C++20 required for async)
mkdir build && cd build
cmake -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ ..
make| 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 |
#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";
}See the user guide for more examples including streaming reads, directory listing, real backends, and the async API.
See CONTRIBUTING.md at the repository root.
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.