tree: c95dbf603f4520c169362a38fb205f27e7fe9a81
  1. AlignedTimeseriesSessionExample.cpp
  2. CMakeLists.txt
  3. MultiSvrNodeClient.cpp
  4. README.md
  5. README_zh.md
  6. SessionExample.cpp
  7. table_example.c
  8. TableModelSessionExample.cpp
  9. tree_example.c
iotdb-client/client-cpp/examples/README.md

IoTDB C++ client examples

中文说明

Sample programs that link against the pre-built IoTDB C++ Session SDK (iotdb_session). Thrift and Boost are not required at application compile time; they are embedded inside the SDK shared library.

All examples connect to a running IoTDB instance (default 127.0.0.1:6667, user root / root).

ExampleDescription
SessionExampleTree model: DDL, insert, query, delete
AlignedTimeseriesSessionExampleAligned time series and templates
TableModelSessionExampleTable (relational) model
MultiSvrNodeClientMulti-node insert/query loop
tree_exampleC Session API (tree model)
table_exampleC Session API (table model)

Which SDK zip to use

Release CI (client-cpp-package.yml) publishes one zip per platform/toolchain: iotdb-session-cpp-<version>-<classifier>.zip (package root contains include/ and lib/).

Deployment targetClassifier suffix
Linux x86_64, glibc >= 2.28linux-x86_64-glibc2.28
Linux aarch64, glibc >= 2.28linux-aarch64-glibc2.28
macOS x86_64macos-x86_64
macOS arm64macos-aarch64
Windows (match your Visual Studio version)windows-x86_64-msvc14.1 ... msvc14.4

The current build compiles Thrift 0.21 from source at CMake configure time. Legacy -Diotdb-tools-thrift.version=... flags applied to the old pre-built Thrift workflow only. Linux release packages are built in the manylinux_2_28 container and require glibc 2.28 or newer. See client-cpp README.

SDK layout (after unpack)

The SDK zip produced by client-cpp contains public headers only and one shared library:

client/
├── include/
│   ├── Session.h
│   ├── Export.h
│   └── ...
└── lib/
    ├── iotdb_session.dll + iotdb_session.lib   (Windows)
    ├── libiotdb_session.so                     (Linux)
    └── libiotdb_session.dylib                  (macOS)

Build the examples

Option A – Maven (recommended in this repo)

From the repository root:

mvn clean verify -P with-cpp -pl iotdb-client/client-cpp -am

Maven builds the C++ client, starts a local IoTDB server for the verify phase, and runs the C++ tests plus runnable examples through CTest. Example binaries are under iotdb-client/client-cpp/target/build/examples/ (or target/build/examples/Release/ with Visual Studio).

Option B – CMake only (manual SDK)

  1. Build or download the SDK and unpack it so client/include and client/lib exist (see layout above).
  2. Use this examples/ directory as the source tree and place client/ beside it, or pass -DIOTDB_SDK_ROOT=/path/to/iotdb-session-cpp-....
  3. Configure and build:
cmake -S iotdb-client/client-cpp/examples -B build \
  -DCMAKE_BUILD_TYPE=Release \
  -DIOTDB_SDK_ROOT=/path/to/iotdb-session-cpp-...
cmake --build build

Windows (Visual Studio generator):

cmake -S . -B build -A x64
cmake --build build --config Release

Each executable is built with the IoTDB runtime library copied next to the .exe / binary (POST_BUILD step). Linux/macOS binaries use $ORIGIN rpath so they resolve the .so / .dylib in the same directory.

Optional staging folder for deployment:

cmake --build build --target example-dist
# -> build/dist/ contains all example binaries + libiotdb_session.{so,dll,dylib}

Run on a clean machine (no compiler, no IoTDB SDK headers)

You only need:

  1. A running IoTDB server reachable from the machine.
  2. The example executable(s) and the IoTDB runtime library in the same directory (or on the system library path).

Copy either from build/.../Release/ (Windows) / build/ (Ninja/Make) or from build/dist/ after example-dist.

Windows

Files to copy

SessionExample.exe
iotdb_session.dll

(Repeat for the other example names if needed.)

Prerequisites on the target PC

Run

.\SessionExample.exe

If you see “The code execution cannot proceed because VCRUNRuntime140.dll was missing”, install the VC++ redistributable above.

You do not need a separate Thrift or Boost runtime; they are inside iotdb_session.dll.

Linux

Files to copy

SessionExample
libiotdb_session.so
chmod +x SessionExample

Prerequisites on the target machine

  • glibc on the target must be ≥ the glibc version on the machine that built the SDK (backward compatible only in that direction).

Check build machine (record in release notes):

ldd --version | head -1
# e.g. ldd (Ubuntu GLIBC 2.35-0ubuntu3) 2.35

Check target machine:

ldd --version | head -1
# must be >= build glibc (same major.minor or newer)

See which GLIBC_ symbols the binary needs:

objdump -T SessionExample | grep GLIBC_ | sed 's/.*GLIBC_/GLIBC_/' | sort -Vu | tail -5
objdump -T libiotdb_session.so | grep GLIBC_ | sed 's/.*GLIBC_/GLIBC_/' | sort -Vu | tail -5

If the target glibc is too old, you'll get errors like version 'GLIBC_2.34' not found at runtime. Rebuild the SDK on an older distro (or in an older container) to widen compatibility.

Run (with .so beside the binary):

./SessionExample

If the shared library is not found:

export LD_LIBRARY_PATH=.
./SessionExample

No separate Thrift install is required.

macOS

Copy the example binary and libiotdb_session.dylib together. The target macOS version should be ≥ the deployment target used to build the SDK. Check with:

otool -L SessionExample

Development notes

  • Windows: Application and SDK both use /MD (dynamic CRT). This matches a default Visual Studio project; link iotdb_session.lib, ship iotdb_session.dll.
  • Linux: SDK is libiotdb_session.so; link it directly. Prefer shipping the .so next to your binary or setting RPATH to $ORIGIN.
  • Examples assume IoTDB is listening on 127.0.0.1:6667; change host/port in the source if needed.

Project layout in this module

client-cpp/examples/
├── README.md
├── README_zh.md
├── CMakeLists.txt
├── SessionExample.cpp
├── AlignedTimeseriesSessionExample.cpp
├── TableModelSessionExample.cpp
├── MultiSvrNodeClient.cpp
├── tree_example.c
└── table_example.c

After mvn package, the runnable tree is under target/ (sources, client/, and CMake build output).