NB-IoT与Open MCU技术解析及低功耗设计实践
2026/10/28 11:00:51
🎬 艾莉丝的简介:
AIChatServer,C++聊天服务器项目,依赖自研SDK静态库与第三方开源库main.cpp、ChatServer.cpp业务源码开发libai_chat_sdk.a已经编译安装至/usr/local/libbuild编译目录,避免编译产物污染源码目录CHAKE_*系列,正确前缀为CMAKE_target_link_libraries错误填写静态库全名libai_chat_sdk,‑l链接器参数不需要前缀lib与后缀.agflagsOpenSSL现代CMake规范使用导入目标OpenSSL::SSL、OpenSSL::Cryptolink_directories作用:指定静态库搜索路径,必须写在add_executable之前,对后续target生效EXECUTABLE_OUTPUT_PATH旧变量,现代CMake推荐使用CMAKE_RUNTIME_OUTPUT_DIRECTORY# 指定CMake最低版本 cmake_minimum_required(VERSION 3.10) # 定义项目名称 project(AIChatServer) # 设置C++编译标准 C++17 set(CMAKE_CXX_STANDARD 17) set(CMAKE_CXX_STANDARD_REQUIRED ON) # 设置默认构建类型,调试使用Debug;发布版本编译改为Release set(CMAKE_BUILD_TYPE Debug) # 设置静态库搜索路径,必须放置在add_executable之前 link_directories(/usr/local/lib) # 生成可执行程序,指定项目源码文件 add_executable(AIChatServer main.cpp ChatServer.cpp ) # 设置可执行文件输出目录,输出至build目录下 set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}) # 查找系统OpenSSL依赖库 find_package(OpenSSL REQUIRED) # 添加编译宏定义,启用cpp‑httplib的OpenSSL HTTPS支持 target_compile_definitions(AIChatServer PRIVATE CPPHTTPLIB_OPENSSL_SUPPORT) # 链接所有依赖库 # 自研静态库ai_chat_sdk,不要写lib前缀,不要写.a后缀 target_link_libraries(AIChatServer ai_chat_sdk # 自研SDK静态库 libai_chat_sdk.a jsoncpp fmt spdlog gflags OpenSSL::SSL OpenSSL::Crypto sqlite3 )link_directories(目录路径)find_package导入目标,link_directories多用于本地自定义静态库link_directories(/usr/local/lib),用于读取安装到此路径下自研静态库libxxx.a、动态库libxxx.soxxx,CMake自动补全lib前缀,传递‑lxxx给gcc链接器libai_chat_sdk.a,写libai_chat_sdk→ 传递参数‑llibai_chat_sdk,链接器查找liblibai_chat_sdk.a,文件不存在直接报错cannot find -llibai_chat_sdk: No such file or directory,就是库名多写lib前缀导致Debug:调试模式,开启调试符号‑g,不做代码优化,开发调试阶段使用Release:发布模式,开启代码优化,去除调试符号,正式上线发布编译使用CMAKE_BUILD_TYPE变量,或者cmake命令行传入参数‑DCMAKE_BUILD_TYPE=ReleaseCPPHTTPLIB_OPENSSL_SUPPORT,开启http‑lib库的SSL HTTPS能力,没有该宏会无法启用HTTPS# 在ChatServer源码目录下创建build文件夹mkdir-pbuildcdbuild# cmake .. 代表读取上一级目录的CMakeLists.txt,生成Makefile构建脚本cmake..Configuring done、Generating done,生成Makefile与CMake缓存文件find_package会直接报错终止配置make.cpp源码编译为.o目标文件AIChatServer[100%] Built target AIChatServer,可执行文件生成在build目录cannot find -lxxx: No such file or directory排查步骤ls /usr/local/lib/libai_chat_sdk.a,确认库文件已经部署link_directories(/usr/local/lib)写在add_executable之前target_link_libraries库名不要写lib前缀,不要写.a后缀‑l:libai_chat_sdk.atarget_link_libraries加入自研库,确认SDK库编译C++标准、构建类型和当前项目完全一致include_directories()或者target_include_directories()添加头文件搜索路径# 推荐现代写法,仅对AIChatServer目标生效 target_include_directories(AIChatServer PRIVATE ${CMAKE_CURRENT_SOURCE_DIR} ${CMAKE_CURRENT_SOURCE_DIR}/../sdk/include )两种方式切换Release模式
set(CMAKE_BUILD_TYPE Release),重新执行cmake … && makecdbuild cmake-DCMAKE_BUILD_TYPE=Release..makefind_package(OpenSSL REQUIRED):REQUIRED代表找不到库直接终止CMake配置,不会静默失败OpenSSL::SSL),导入目标自带库路径、头文件路径,不需要手动配置link_directoriesuu们,本文的内容到这里就全部结束了,艾莉丝在这里再次感谢您的阅读!
|
结语:希望对学习Linux相关内容的uu有所帮助,不要忘记给博主“一键四连”哦!
往期回顾:
【AI大模型接入SDK】Trae生成main方法
🗡博主在这里放了一只小狗,大家看完了摸摸小狗放松一下吧!🗡 ૮₍ ˶ ˊ ᴥ ˋ˶₎ა