C
C ABI 内核(darra_ai.h + DarraAI.Core)。全部推理唯一入口:
会话:darra_session_open / open_plain → darra_session_infer_image → darra_session_close
池: darra_pool_open / open_plain → darra_pool_submit → darra_pool_wait → darra_pool_close
GUI、PLC、客户应用同一路径,无第二套。权威契约 = darra_ai.h,语义冲突以头文件为准。
公开 runtime 构建只含解密、验票、推理分发、诊断、运行时包管理;物理上没有 darra_encrypt_ / darra_issue_ / darra_fingerprint_ 符号。
本文档对应 C SDK v1.0.0(与 darra_ai.h 的 DARRA_VERSION_MAJOR/MINOR/PATCH 同一组数字)。加载后第一件事核对 ABI:DARRA_VERSION_DECODE_MAJOR(darra_version()) == DARRA_VERSION_MAJOR,不等 = 装错了库,禁止继续。运行时字符串用 darra_version_string(),客户机必须看到 1.0.0+runtime。
安装
从 下载页面 获取内核包或 darra-ai-c-sdk.zip(头文件 + import lib + 示例)。
- Windows x64
- Linux x64
- Linux ARM64
- CMake
包:darra-ai-core-windows-x64.zip(DarraAI.Core.dll、darra_ai.h、import lib、darra-selftest)。
cl /utf-8 /Fe:my_app.exe main.c DarraAI.Core.lib /I include
运行目录必须带 DarraAI.Core.dll。MSVC 消费方加 /utf-8(头文件 UTF-8 无 BOM,注释全中文)。
包:darra-ai-core-linux-x64.tar.gz(libCore.so + 头文件)。
gcc -o my_app main.c -I include -L. -ldarraai_core -Wl,-rpath,'$ORIGIN'
包:darra-ai-core-linux-arm64.tar.gz(RK3588 板端与客户板共用)。edge-rknn 只在此平台运行。Windows 上没有 RKNN。
gcc -o my_app main.c -I include -L. -ldarraai_core -Wl,-rpath,'$ORIGIN'
add_executable(my_app main.c)
target_include_directories(my_app PRIVATE ${SDK_PATH}/include)
# Windows 链接 DarraAI.Core;Linux 链接 darraai_core
target_link_libraries(my_app PRIVATE DarraAI.Core)
#include "darra_ai.h"
只交付 x64 / ARM64,两平台均单调用约定,无 __stdcall 变体。
环境要求
| 项目 | 要求 |
|---|---|
| 操作系统 | Windows x64 / Linux x86_64 / Linux ARM64(RK3588)。macOS 不在 v1 |
| 编译器 | MSVC(/utf-8)/ GCC / Clang,C11 或更高 |
| 头文件 | darra_ai.h |
| 运行库 | Windows:DarraAI.Core.dll;Linux:libCore.so |
| 权限 | 装运行时包到系统目录时可能需要管理员;SDK 不代装 NVIDIA / RK3588 NPU 等系统驱动 |
| 重依赖 | ORT / CUDA / TensorRT / OpenVINO 等依赖由 Studio 或部署人员提前部署为 Provider;SDK 打开模型不下载或安装 |
- 不承诺 dump 免疫。 授权机 + 管理员级调试器在会话存活期暂停 dump,挡不住。本 SDK 防的是静态拷走、转发、无授权运行、常规 dump 工具、逆向授权算法。
- 加密单向。 官方不提供解回明文的通道。永久密码只用于无限次推理。
- 环境提前部署。 SDK 只验证和加载本地 Provider;下载、安装与系统驱动由 Studio 或部署流程处理,
darra_diag_collect提供只读诊断。 - macOS 不在 v1。 不是「即将支持」。
- Windows 无 RKNN。 rknn 载荷只在 linux-arm64 板端运行;Windows 收到即
DARRA_UNSUPPORTED_PAYLOAD。 - 不承诺硬实时。 推理是阻塞调用。PLC 侧必须在扫描周期外进程 / 线程调用。
- 诊断 JSON 不含密钥 / 密码 / token / 机器指纹字节。
快速开始
客户现场加载 .darmodel(新分发钥匙内嵌,key_path 传 NULL)。导出格式即加载格式,用户零配置。打开前用 darra_session_unlock_info 决定要不要一次激活码。
#include <stdio.h>
#include "darra_ai.h"
int main(void) {
if (DARRA_VERSION_DECODE_MAJOR(darra_version()) != DARRA_VERSION_MAJOR) {
fprintf(stderr, "ABI 不匹配: %s\n", darra_version_string());
return 1;
}
darra_session* s = NULL;
int32_t rc = darra_session_open("model.darmodel", NULL, NULL, NULL, &s);
if (rc != DARRA_OK) {
darra_error_t err; err.size = sizeof(err);
darra_last_error(&err);
fprintf(stderr, "[%d] %s\n建议: %s\n", err.code, err.message, err.hint);
return (int)rc;
}
/* 读图、填 darra_image_desc、darra_session_infer_image — 见「推理」页 */
darra_session_close(s);
return 0;
}
对应包未部署时返回缺包错误,请先准备环境再重试。环境准备的进度在 Studio 右上角下载中心查看。失败码与 hint 见 错误码。
明文模型(Studio 试跑 / 客户自有无需加密模型)与加密入口同一推理路径,只跳过容器解码与验票:
darra_session* s = NULL;
int32_t rc = darra_session_open_plain("model.onnx", NULL, &s);
open_plain 的路径可以是 .onnx、.pdmodel(同目录须有 .pdiparams)、或含二者的目录。Paddle 是运行时载荷(PayloadKind=paddle)。.pt / .pth 仍拒,返回 DARRA_UNSUPPORTED_PAYLOAD。
.darmodel+ 激活码(未绑机)/ NULL(已绑机) — 生产环境,推荐。darra_session_open_plain— Studio 试跑 / 客户自有明文模型。darra_pool_open— 同模型突发 / 流式;max_workers硬顶 8。