IoTDB C++ 客户端示例

English

本目录提供链接 IoTDB C++ Session SDKiotdb_session)的示例程序。 应用侧编译 不需要 单独安装 Thrift 或 Boost 头文件/库,它们已封装在 SDK 共享库内部。

所有示例默认连接本机 IoTDB(127.0.0.1:6667,用户 root / 密码 root)。

示例说明
SessionExample树模型:建库建序列、写入、查询、删除
AlignedTimeseriesSessionExample对齐时间序列与模板
MultiSvrNodeClient多节点写入/查询循环
tree_exampleC Session API(树模型)

选择哪个 SDK 压缩包

CI 发版(client-cpp-package.yml) 会按平台/工具链打出多份 zip,文件名形如 client-cpp-<version>-<classifier>.zip(解压后根目录即为 include/lib/)。请按目标环境选择:

目标环境classifier 后缀
Linux x86_64,glibc ≥ 2.24,CXX11 ABI(推荐linux-x86_64-glibc224
Linux aarch64,glibc ≥ 2.24,CXX11 ABI(推荐linux-aarch64-glibc224
Linux x86_64,glibc ≥ 2.17,旧 libstdc++ ABIlinux-x86_64-glibc217
Linux aarch64,glibc ≥ 2.17,旧 libstdc++ ABIlinux-aarch64-glibc217
macOS x86_64mac-x86_64
macOS arm64mac-aarch64
Windows + 与工程相同的 VS 版本windows-x86_64-vs2017vs2026

当前 CMake 构建在配置阶段从源码编译 Thrift 0.21,不再通过 -Diotdb-tools-thrift.version=0.14.1.1-gcc4-SNAPSHOT 等旧参数控制 glibc; Linux 上若部署机 glibc ≥ 2.24 且使用系统默认 g++,请优先选用 glibc224 包。仅当目标机停留在 glibc 2.17(如 CentOS 7)或必须与旧 libstdc++ ABI 一致时, 选用 glibc217 包;在 Ubuntu 22/24 上链 glibc217 时常需 -D_GLIBCXX_USE_CXX11_ABI=0。详见 client-cpp README

SDK 目录结构(解压后)

client-cpp 打出的 SDK 压缩包只包含 公开头文件一个共享库

client/
├── include/
│   ├── Session.h
│   ├── Export.h
│   └── ...          (17 个公开头;无 thrift/、boost/)
└── lib/
    ├── iotdb_session.dll + iotdb_session.lib   (Windows)
    ├── libiotdb_session.so                     (Linux)
    └── libiotdb_session.dylib                  (macOS)

编译示例

方式 A:Maven(本仓库推荐)

在仓库根目录执行:

mvn clean package -DskipTests -P with-cpp -pl example/client-cpp-example -am

Maven 会将 SDK 解压到 example/client-cpp-example/target/client/,并在 target/ 下调用 CMake。可执行文件位于 target/(具体路径取决于生成器; Windows + Visual Studio 一般为 target/Release/)。

方式 B:仅 CMake(手动准备 SDK)

  1. 自行编译或下载 SDK,解压后保证存在 client/includeclient/lib(见 上文目录结构)。
  2. src/*.{cpp,c}src/CMakeLists.txt 放在同一目录(或保留 src/ 结构,并在同级放置 client/)。
  3. 配置并编译:
cmake -S . -B build -DCMAKE_BUILD_TYPE=Release
cmake --build build

Windows(Visual Studio 生成器):

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

编译完成后,IoTDB 运行时库会通过 POST_BUILD 自动复制到 与可执行文件相同 的目录。Linux/macOS 可执行文件还设置了 $ORIGIN rpath,可在同目录加载 .so / .dylib

可选:打部署包目录

cmake --build build --target example-dist
# 生成 build/dist/,内含全部示例二进制 + libiotdb_session.{so,dll,dylib}

在「干净机器」上运行(无需编译器、无需 SDK 头文件)

目标机器只需:

  1. 可访问的 IoTDB 服务(已启动)。
  2. 示例可执行文件IoTDB 运行时库 放在 同一目录(或位于系统 库搜索路径中)。

可从 build/.../Release/(Windows)或 build/(Ninja/Make)复制,也可在 执行 example-dist 后直接使用 build/dist/

Windows

需要拷贝的文件

SessionExample.exe
iotdb_session.dll

(其他示例同理,可执行文件与 iotdb_session.dll 成对拷贝。)

目标机器前置条件

  • 64 位 Windows(示例为 x64 构建)。
  • 安装 Microsoft Visual C++ 2015–2022 可再发行组件包(x64)
    SDK 与示例均使用 /MD(动态 CRT),该安装包提供 vcruntime140.dllmsvcp140.dll 等运行时。
    仅安装此 Redistributable 即可,目标机 不需要 Visual Studio,也 不需要 IoTDB SDK 头文件或 Thrift/Boost。

运行

.\SessionExample.exe

若提示缺少 VCRUNTIME140.dll,请安装上述 VC++ 可再发行包。

Thrift、Boost 已包含在 iotdb_session.dll 内,无需单独部署。

Linux

需要拷贝的文件

SessionExample
libiotdb_session.so
chmod +x SessionExample

目标机器前置条件

  • 目标机的 glibc 版本必须 ≥ 编译 SDK 时的 glibc 版本(仅向后兼容: 新系统可跑旧库要求,旧系统不能跑需要更高 glibc 的二进制)。

编译机 上记录版本(建议写入发布说明):

ldd --version | head -1
# 例如:ldd (Ubuntu GLIBC 2.35-0ubuntu3) 2.35

目标机 上检查:

ldd --version | head -1
# 版本号应 >= 编译机(同主版本次版本或更新)

查看二进制依赖的最高 GLIBC_ 符号:

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

若目标 glibc 过旧,运行时会报错,例如 version 'GLIBC_2.34' not found。可在更旧的发行版(或旧版容器)上重新编译 SDK,以扩大兼容范围。

运行.so 与可执行文件同目录):

./SessionExample

若找不到共享库:

export LD_LIBRARY_PATH=.
./SessionExample

无需单独安装 Thrift。

macOS

将示例可执行文件与 libiotdb_session.dylib 放在同一目录。目标 macOS 版本 应 ≥ 编译 SDK 时设置的 deployment target。可用以下命令检查依赖:

otool -L SessionExample

开发说明

  • Windows:应用与 SDK 均使用 /MD,与 Visual Studio 默认工程一致; 链接 iotdb_session.lib,部署时携带 iotdb_session.dll
  • Linux:直接链接 libiotdb_session.so;建议与可执行文件同目录发布,或 设置 RPATH=$ORIGIN
  • 示例默认连接 127.0.0.1:6667;如需修改地址/端口,请编辑对应源码。

本模块目录结构

client-cpp-example/
├── pom.xml              # Maven:解压 SDK + 调用 CMake
├── README.md            # 英文说明
├── README_zh.md         # 中文说明(本文件)
└── src/
    ├── CMakeLists.txt
    ├── SessionExample.cpp
    ├── AlignedTimeseriesSessionExample.cpp
    ├── MultiSvrNodeClient.cpp
    └── tree_example.c

执行 mvn package 后,可在 target/ 下找到源码、client/ SDK 与 CMake 构建产物。