版本与诊断
ABI 核对、版本字符串、本机环境诊断。装包见 运行时包。
功能概览
| 类别 | 属性 | 类型 | 访问 | 说明 |
|---|---|---|---|---|
| 版本 | darra_version | uint32_t | 查询 | 打包版本 major*65536 + minor*256 + patch |
darra_version_string | const char* | 查询 | 静态字符串,形如 1.0.0+runtime;禁止释放 | |
| 诊断 | darra_diag_collect | int32_t | 查询 | 本机环境诊断 JSON;用完 darra_string_free |
版本
darra_version()
uint32_t darra_version(void);
返回打包版本 major*65536 + minor*256 + patch,用 DARRA_VERSION_DECODE_MAJOR / MINOR / PATCH 宏拆。不会失败,不改错误槽。
头文件常量:DARRA_VERSION_MAJOR 1、DARRA_VERSION_MINOR 0、DARRA_VERSION_PATCH 0;DARRA_HEADER_VERSION 为本头打包值。绑定侧核对:运行时 major 必须等于 DARRA_VERSION_MAJOR,否则 ABI 已破坏。
返回值:
uint32_t— 打包版本
darra_version_string()
const char* darra_version_string(void);
返回形如 "1.0.0+runtime" / "1.0.0+authoring" 的静态字符串。生命周期 = 进程,禁止释放。客户机上必须看到 +runtime。公开包是 runtime 构建,看不到加密 / 签发符号。
返回值:
const char*— 静态 UTF-8 字符串,禁止darra_string_free
示例:
if (DARRA_VERSION_DECODE_MAJOR(darra_version()) != DARRA_VERSION_MAJOR) {
std::fprintf(stderr, "ABI 不匹配: 头=%d 库=%s\n",
DARRA_VERSION_MAJOR, darra_version_string());
return 1;
}
环境自检
darra_diag_collect()
int32_t darra_diag_collect(char** out_json);
采集本机环境诊断,输出统一 JSON。覆盖:os/arch、CPU、GPU 型号 + 驱动版本 + CUDA 上限、已装 Provider 及版本、授权状态(去敏:绝不含密钥 / 密码 / token / 机器指纹字节)、最近错误环形缓冲(去敏)。
尽力而为:单个字段采不到时 JSON 中该字段为 null 或缺席,整体不失败;只有彻底无法采集才返回 DARRA_INTERNAL。可能触发 WMI / NVML / sysfs 查询,耗时可到数百毫秒——禁止在 PLC 扫描周期等实时路径调用。
schema 见 类型。
参数:
out_json(char**) — SDK 分配的 UTF-8 JSON,用完darra_string_free
返回值:
int32_t—DARRA_OK成功;非 0 = 错误码
示例:
char* diag = nullptr;
if (darra_diag_collect(&diag) == DARRA_OK) {
std::puts(diag);
darra_string_free(diag);
}
完整示例
#include "darra_ai.h"
#include <cstdio>
int main() {
if (DARRA_VERSION_DECODE_MAJOR(darra_version()) != DARRA_VERSION_MAJOR) {
std::fprintf(stderr, "ABI 不匹配,库版本 = %s\n", darra_version_string());
return 1;
}
char* diag = nullptr;
if (darra_diag_collect(&diag) == DARRA_OK) {
std::fprintf(stderr, "[diag] %s\n", diag);
darra_string_free(diag);
}
return 0;
}