新闻详情

新闻详情

首页 / 资讯中心 / 详情

【AI大模型接入SDK】ChatSDK:CMake构建静态库完整实现

发布时间:2026/10/1 10:48:21来源:尧图网络
【AI大模型接入SDK】ChatSDK:CMake构建静态库完整实现
个人主页艾莉丝努力练剑❄专栏传送门《C语言》《数据结构与算法》《C/C干货分享学习过程记录》《Linux操作系统编程详解》《笔试/面试常见算法从基础到进阶》《Python干货分享》⭐️为天地立心为生民立命为往圣继绝学为万世开太平 艾莉丝的简介文章目录1 ~ ChatSDK CMake 构建静态库完整实现1.1 业务目标1.2 两种源文件管理方式1.2.1 手动枚举源文件1.2.2 file (GLOB_RECURSE) 自动收集源码1.3 sdk/CMakeLists.txt 完整正确代码1.4 关键依赖宏CPPHTTPLIB_OPENSSL_SUPPORT1.5 编译与安装完整 shell 操作流程1.6 常见报错与排错1.6.1 报错OpenSSL::SSL target was not found1.6.2 cmake 警告cmake_minimum_required should be called prior to project()1.6.3 权限拒绝 Permission denied1.6.4 GLOB_RECURSE 新增源码不编译1.7 SDK 对外使用说明1.8 核心概念补充1.8.1 PUBLIC / PRIVATE / INTERFACE1.8.2 install 参数释义1.8.3 静态库本质结尾1 ~ ChatSDK CMake 构建静态库完整实现1.1 业务目标将 ChatSDK 编译为Linux 静态库.a对外交付产物为头文件 静态库文件。通过make install将库与头文件安装至系统目录/usr/local实现全局可被其他项目直接引用。SDK 目录结构sdk ├─ CMakeLists.txt# SDK的CMake构建脚本├─ include# 对外头文件│ ├─ util │ ├─ ChatGPTProvider.h │ ├─ ChatSDK.h │ ├─ common.h │ ├─ DataManager.h │ ├─ DeepSeekProvider.h │ ├─ GeminiProvider.h │ ├─ LLMManager.h │ ├─ LLMProvider.h │ ├─ OllamaLLMProvider.h │ └─ SessionManager.h └─ src# 实现源文件├─ util ├─ ChatGPTProvider.cpp ├─ ChatSDK.cpp ├─ DataManager.cpp ├─ DeepSeekProvider.cpp ├─ GeminiProvider.cpp ├─ LLMManager.cpp ├─ OllamaLLMProvider.cpp └─ SessionManager.cpp1.2 两种源文件管理方式1.2.1 手动枚举源文件原理在add_executable / add_library中显式罗列全部.cpp源码。优点编译文件清单清晰可控。缺点新增.cpp源文件必须手动修改 CMakeLists.txt 添加遗忘会导致新增文件不参与编译。add_executable(testLLM testLLM.cpp../sdk/src/util/myLog.cpp../sdk/src/DeepSeekProvider.cpp../sdk/src/ChatGPTProvider.cpp../sdk/src/GeminiProvider.cpp../sdk/src/OllamaLLMProvider.cpp../sdk/src/DataManager.cpp../sdk/src/SessionManager.cpp../sdk/src/LLMManager.cpp../sdk/src/ChatSDK.cpp)1.2.2 file (GLOB_RECURSE) 自动收集源码原理递归遍历指定目录通配符匹配后缀文件存入 CMake 变量。注意GLOB 不会监测磁盘文件变更新增源文件需要重新执行cmake ..才会被识别。# 递归收集src目录所有cpp源文件 file(GLOB_RECURSE SDK_SOURCES src/*.cpp) # 递归收集include目录所有h头文件 file(GLOB_RECURSE SDK_HEADERS include/*.h)1.3 sdk/CMakeLists.txt 完整正确代码# CMake最低版本约束必须放在文件最开头cmake_minimum_required(VERSION3.10)# 项目定义project(ai_chat_sdk)# SDK名称变量set(SDK_NAMEai_chat_sdk)# C标准配置set(CMAKE_CXX_STANDARD17)set(CMAKE_CXX_STANDARD_REQUIRED ON)# 构建类型Release发布版本set(CMAKE_BUILD_TYPE Release)# 递归收集源码与头文件file(GLOB_RECURSE SDK_SOURCESsrc/*.cpp)file(GLOB_RECURSE SDK_HEADERSinclude/*.h)# 生成静态库 STATIC代表静态库add_library(${SDK_NAME}STATIC${SDK_SOURCES}${SDK_HEADERS})# 设置编译产物输出目录set(EXECUTABLE_OUTPUT_PATH${CMAKE_CURRENT_SOURCE_DIR}/build)# 头文件搜索路径 PUBLIC使用者也会继承该头文件路径target_include_directories(${SDK_NAME}PUBLIC${CMAKE_CURRENT_SOURCE_DIR}/include)# HTTPS支持宏定义启用cpp‑httplib的OpenSSL能力target_compile_definitions(${SDK_NAME}PUBLIC CPPHTTPLIB_OPENSSL_SUPPORT)# 查找OpenSSL依赖find_package(OpenSSL REQUIRED)# 第三方库搜索路径link_directories(/usr/local/lib)# 链接依赖库target_link_libraries(${SDK_NAME}jsoncppfmtspdlog sqlite3 OpenSSL::SSL OpenSSL::Crypto)########## install安装规则 make install执行时生效 ########### 安装静态库 ARCHIVE专门用于静态库install(TARGETS${SDK_NAME}ARCHIVE DESTINATION lib)# 批量安装头文件复制到/usr/local/include/ai_chat_sdkinstall(DIRECTORY${CMAKE_CURRENT_SOURCE_DIR}/include/ DESTINATION include/ai_chat_sdk FILES_MATCHING PATTERN*.h)关键字说明add_library(xxx STATIC)构建静态库产物lib${SDK_NAME}.a。target_include_directories PUBLIC本库编译、外部使用者编译均可看到该头文件目录PRIVATE 仅本项目内部生效。target_compile_definitions PUBLIC宏定义会传递给链接本 SDK 的上层项目。install TARGETS ... ARCHIVE DESTINATION lib静态库安装到${CMAKE_INSTALL_PREFIX}/lib默认CMAKE_INSTALL_PREFIX/usr/local。install DIRECTORY批量复制 include 下全部.h到系统 include 子目录。1.4 关键依赖宏CPPHTTPLIB_OPENSSL_SUPPORTcpp‑httplib 库默认仅支持 HTTP开启该宏才会引入 OpenSSL 头文件启用 HTTPS 能力。源码逻辑#ifdef CPPHTTPLIB_OPENSSL_SUPPORT分支内才会#include openssl/xxx。宏必须通过target_compile_definitions定义不能写在代码内。1.5 编译与安装完整 shell 操作流程# 进入sdk源码目录cdsdk# 创建构建目录mkdirbuildcdbuild# cmake解析构建脚本cmake..# 编译生成静态库libai_chat_sdk.amake# 安装到系统目录修改/usr/local需要root权限sudomakeinstall安装完成产物位置静态库/usr/local/lib/libai_chat_sdk.a头文件/usr/local/include/ai_chat_sdk/1.6 常见报错与排错1.6.1 报错OpenSSL::SSL target was not found根因find_package(OpenSSL REQUIRED)调用缺失找不到导入目标OpenSSL::SSL。修复CMake 脚本中添加find_package(OpenSSL REQUIRED)放在使用OpenSSL::SSL之前。1.6.2 cmake 警告cmake_minimum_required should be called prior to project()根因cmake_minimum_required()写在了project()之后。修复文件第一行必须写 cmake_minimum_required再写 project 指令。1.6.3 权限拒绝 Permission denied现象直接make install写/usr/local失败。解决方案使用sudo make install提升权限执行安装。1.6.4 GLOB_RECURSE 新增源码不编译根因file (GLOB_RECURSE 仅 cmake 解析阶段扫描一次磁盘后续新增文件不会自动检测。修复新增源文件后重新执行cmake ..再执行 make。1.7 SDK 对外使用说明其他开发者使用该 ChatSDK获取 SDK 源码。创建 build 目录执行cmake .. make sudo make install。使用者项目直接#include ai_chat_sdk/ChatSDK.h链接ai_chat_sdk即可。1.8 核心概念补充1.8.1 PUBLIC / PRIVATE / INTERFACE属性作用域PRIVATE仅当前库编译时生效不会传递给链接者PUBLIC当前库 所有链接该库的上层项目均生效INTERFACE仅链接该库的上层项目生效本库编译不生效1.8.2 install 参数释义ARCHIVE DESTINATION lib专门对应静态库.a。LIBRARY DESTINATION lib专门对应动态库.so/.dylib。RUNTIME DESTINATION bin可执行程序、Windows 下 dll。CMAKE_INSTALL_PREFIX安装根目录默认/usr/localcmake 可通过-DCMAKE_INSTALL_PREFIXxxx修改安装路径。1.8.3 静态库本质Linux 静态库.a本质是.o目标文件归档包链接阶段完整复制库内代码到最终可执行文件。优点部署简单运行时不依赖外部库文件缺点可执行文件体积大库更新需要重新编译链接上层程序。结尾uu们本文的内容到这里就全部结束了艾莉丝在这里再次感谢您的阅读艾莉丝努力练剑C/C Linux 底层探索者 | 一个正在努力练剑的技术博主【关注】跟随我一起深耕技术领域见证每一次成长。❤️【点赞】让优质内容被更多人看见让知识传递更有力量。⭐【收藏】把核心知识点存好在需要时随时查、随时用。【评论】分享你的经验或疑问评论区一起交流避坑不要忘记给博主“一键四连”哦“今日练剑达成”“技术之路难免有困惑但同行的人会让前进更有方向。”结语希望对学习Linux相关内容的uu有所帮助不要忘记给博主“一键四连”哦往期回顾【AI大模型接入SDK】ChatSDK 集成测试概述博主在这里放了一只小狗大家看完了摸摸小狗放松一下吧૮₍ ˶ ˊ ᴥ ˋ˶₎ა
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

VC++抓包实战:WinPcap截取网卡数据包与协议解析 2026/10/1 11:34:26

VC++抓包实战:WinPcap截取网卡数据包与协议解析

简介:这是一份面向网络编程初学者与安全方向开发者的 VC 网络抓包程序源代码,基于 WinPcap 的 Packet32 驱动库实现网卡数据包嗅探与截取,可用于学习底层协议解析、网卡混杂模式设置及数据包过滤等核心技能。压缩包共 44 个文件,约…

阅读更多 →
无人机测试专题:从分系统到编队的重点项与关注点 2026/10/1 11:34:26

无人机测试专题:从分系统到编队的重点项与关注点

共 4 个测试专题,按系统划分测试重点项与主要关注项。 目录 1. 分系统测试关注点矩阵2. 飞行异常测试场景(8大类32项)3. 测试方法与工具4. 编队测试专项 1. 分系统测试关注点矩阵 机体平台与结构系统(结构与硬件 核心&#xf…

阅读更多 →
JSP超市管理系统实战:MyEclipse+MySQL经典组合开发指南 2026/10/1 11:34:26

JSP超市管理系统实战:MyEclipse+MySQL经典组合开发指南

简介:这是一套基于JSP与Java技术栈的超市管理系统源码,采用B/S架构,配合MyEclipse与Tomcat开发,适合正在学习Java Web、需要课程设计或毕业设计参考的初学者与在校学生。系统围绕超市日常业务展开,涵盖人事管理、销售管…

阅读更多 →
世界4大顶级黑客,排第一的他从不黑中国,最后一位是中国的骄傲 2026/10/1 11:34:26

世界4大顶级黑客,排第一的他从不黑中国,最后一位是中国的骄傲

世界4大顶级黑客,排第一的他从不黑中国,最后一位是中国的骄傲,大家对于黑客应该都是知道一点的,也都是特别的羡慕这种人的,全世界最顶级的黑客之一就是凯米,米特尼克了,他是第一个被美国的调查局…

阅读更多 →
Java SSM与Flask双框架房地产营销网站:前后台如何各司其职 2026/10/1 11:34:25

Java SSM与Flask双框架房地产营销网站:前后台如何各司其职

一个项目两面技术:Java SSM 与 Flask 如何在同一套房地产营销网站里各司其职作为一名折腾过不少毕业设计和企业级项目的开发者,当我第一次看到"基于 JavaSSMFlask 的房地产营销策划宣传网站"这个题目时,第一反应是:这不…

阅读更多 →
JavaMVC小区物业管理系统源码解析与二次开发实战 2026/10/1 11:34:18

JavaMVC小区物业管理系统源码解析与二次开发实战

简介:这份资源是面向计算机相关专业毕业设计场景的Java MVC实践项目——小区物业管理系统,适合正在准备毕设、需要完整可运行案例的本科或高职学生参考。项目采用MVC分层架构,数据库基于MySQL,前端使用BootStrap框架实现页面自适应…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉