本目录提供链接 IoTDB C++ Session SDK(iotdb_session)的示例程序。 应用侧编译 不需要 单独安装 Thrift 或 Boost 头文件/库,它们已封装在 SDK 共享库内部。
所有示例默认连接本机 IoTDB(127.0.0.1:6667,用户 root / 密码 root)。
| 示例 | 说明 |
|---|---|
SessionExample | 树模型:建库建序列、写入、查询、删除 |
AlignedTimeseriesSessionExample | 对齐时间序列与模板 |
MultiSvrNodeClient | 多节点写入/查询循环 |
tree_example | C Session API(树模型) |
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++ ABI | linux-x86_64-glibc217 |
| Linux aarch64,glibc ≥ 2.17,旧 libstdc++ ABI | linux-aarch64-glibc217 |
| macOS x86_64 | mac-x86_64 |
| macOS arm64 | mac-aarch64 |
| Windows + 与工程相同的 VS 版本 | windows-x86_64-vs2017 … vs2026 |
当前 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。
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)
在仓库根目录执行:
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/)。
client/include 与 client/lib(见 上文目录结构)。src/*.{cpp,c} 与 src/CMakeLists.txt 放在同一目录(或保留 src/ 结构,并在同级放置 client/)。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}
目标机器只需:
可从 build/.../Release/(Windows)或 build/(Ninja/Make)复制,也可在 执行 example-dist 后直接使用 build/dist/。
需要拷贝的文件
SessionExample.exe iotdb_session.dll
(其他示例同理,可执行文件与 iotdb_session.dll 成对拷贝。)
目标机器前置条件
/MD(动态 CRT),该安装包提供 vcruntime140.dll、 msvcp140.dll 等运行时。运行
.\SessionExample.exe
若提示缺少 VCRUNTIME140.dll,请安装上述 VC++ 可再发行包。
Thrift、Boost 已包含在 iotdb_session.dll 内,无需单独部署。
需要拷贝的文件
SessionExample libiotdb_session.so chmod +x SessionExample
目标机器前置条件
在 编译机 上记录版本(建议写入发布说明):
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。
将示例可执行文件与 libiotdb_session.dylib 放在同一目录。目标 macOS 版本 应 ≥ 编译 SDK 时设置的 deployment target。可用以下命令检查依赖:
otool -L SessionExample
/MD,与 Visual Studio 默认工程一致; 链接 iotdb_session.lib,部署时携带 iotdb_session.dll。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 构建产物。