SDK 目录结构及主要文件介绍
├─bin
├─doxygen
├─include
├─lib
├─syslib
└─wrapper
bin
/lib
目录存放 NIM SDK 的动态库文件, 在您发布时请打包使用到的模块, .lib
后缀为 Windows 下的动态库符号链接文件
doxygen
用于生成文档的 doxygen 配置文件,您可以在该目录下通过 doxygen 生成本地文档
include
目录存放了 NIM C SDK 的导出头文件
syslib
目录存放了 NIM SDK 的系统依赖库,仅在 Linux 下使用
wrapper
V1 SDK 默认导出纯 C 风格接口,该目录存放了对 C 接口封装的 C++ 接口源代码
Conan 接入
添加 yunxin 的 conan 仓库远端地址:
conan remote add yunxin https://gitlab.com/api/v4/projects/47777150/packages/conan
添加完成后通过命令 conan search nim -r yunxin
查看可依赖的版本列表:
➜ ~ conan search nim -r yunxin
Existing package recipes:
nim/9.12.1@yunxin/stable
nim/9.12.2@yunxin/stable
....
在您的 conanfile.txt
或 conanfile.py
的 requirements 下添加依赖后执行 conan install 即可使用。
使用 conan 管理的 NIM C++ SDK 支持选择组件作为依赖,我们提供了 4 个选项来控制可选模块:
with_nim
是否依赖 NIM 即时通讯模块,默认为 True
with_chatroom
是否依赖 NIM 聊天室模块,默认为 True
with_qchat
是否依赖 NIM 圈组模块,默认为 True
with_http_tools
是否依赖 NIM HTTP 工具库,默认为 True
如您只需要使用聊天室模块,可以通过 option 选项关闭其他模块,如:
default_options = {
"nim:with_nim": False,
"nim:with_qchat": False,
"nim:with_http_tools": False,
}
或者在使用 conan install 安装时,通过 -o 参数控制:
conan install nim/9.12.2@yunxin/stable -o nim:with_nim=False -o nim:with_qchat=False -o nim:with_http_tools=False
CMake 接入
如果您的原工程是基于 CMake 进行管理, 可以使用 add_subdirectory
命令将 wrapper 目录添加为子目录, 使用 include_directories
方法将 include 和 wrapper 文件夹添加为头文件搜索路径, 最后使用 target_link_libraries
按需添加链接库即可, 库名称分别为:
nim_cpp_wrapper
NIM C++ 封装层库
nim_chatroom_cpp_wrapper
Chatroom C++ 封装层库
nim_wrapper_util
NIM 及 Chatroom C++ 封装层库通用的工具库
nim_tools_cpp_wrapper
HTTP 组件 C++ 封装层库
nim_qchat_cpp_wrapper
QChat 圈组 C++ 封装层库
示例:
# CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
project(nim_demo)
# 添加 V1 系列 API C++ 封装层到 CMake 根工程中
add_subdirectory(wrapper)
add_executable(${PROJECT_NAME} main.cpp)
# 添加 include 目录到头文件搜索路径
target_include_directories(${PROJECT_NAME} PRIVATE
${CMAKE_CURRENT_LIST_DIR}/include
${CMAKE_CURRENT_LIST_DIR}/wrapper
)
# 添加链接库
target_link_libraries(${PROJECT_NAME} PRIVATE
nim_cpp_wrapper
nim_chatroom_cpp_wrapper
nim_wrapper_util
nim_tools_cpp_wrapper
nim_qchat_cpp_wrapper
)
现在您可以使用 C++ 封装层的接口进行开发了
int main()
{
if(ret != nim::kNIMResSuccess){
return -1;
}
return 0;
}
static bool Init(const std::string &app_key, const std::string &app_data_dir, const std::string &app_install_dir, const SDKConfig &config)
Definition: nim_cpp_client.cpp:166
SDK初始化参数
Definition: nim_client_helper.h:25
传统方式接入
将 include
和 wrapper
目录添加到头文件搜索路径中
- Visual Studio
右键项目 -> 属性 -> C/C++ -> 常规 -> 附加包含目录
- Xcode
左侧导航栏 -> 项目 -> Build Settings -> 搜索 Header Search Pathss
- Qt Creator
# .pro 文件
INCLUDEPATH += include wrapper
静态库集成
编译 wrapper
目录下的源文件生成静态库,产物会输出到 exports
目录下
> md build
> cmake -S wrapper -B build -G "Visual Studio 15 2017 Win64" -DCMAKE_INSTALL_PREFIX=exports
> cmake --build build --config Release --target install
> mkdir build
> cmake -S wrapper -B build -G "Xcode" -DCMAKE_INSTALL_PREFIX=exports
> cmake --build build --config Release --target install
> mkdir build
> cmake -S wrapper -B build -G "Unix Makefiles" -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=exports
> cmake --build build --config Release --target install
cmake configure 添加 -DCMAKE_CXX_FLAGS_DEBUG=/MTd
或 -DCMAKE_CXX_FLAGS_RELEASE=/MT
生成 MTd/MT 工程
cmake configure 添加 -DBUILD_SHARED_LIBS=ON
来生成动态库工程
cmake configure 修改 -G
参数来指定您期望的 generator
修改命令中的 Release
为 Debug
来生成 Debug 版本的库
将生成的静态库添加到您项目的链接库中
- Visual Studio
- 右键项目 -> 链接器 -> 常规, 右侧的“附加库目录”中添加 exports 为库文件搜索路径
- 右键项目 -> 属性 -> 链接器 -> 输入 -> 附加依赖项添加用到的静态库名,
如 nim_cpp_wrapper.lib, nim_chatroom_cpp_wrapper.lib, nim_wrapper_util.lib, nim_tools_cpp_wrapper.lib, nim_qchat_cpp_wrapper.lib
- Xcode
- 左侧导航栏 -> 项目 -> Build Settings -> 搜索 Library Search Paths
- 左侧导航栏 -> 项目 -> Build Phases -> Link Binary With Libraries 添加用到的静态库名,如 libnim_cpp_wrapper.a
- Qt Creator
# .pro 文件
LIBS += -Lexports -lnim_cpp_wrapper -lnim_chatroom_cpp_wrapper -lnim_wrapper_util -lnim_tools_cpp_wrapper -lnim_qchat_cpp_wrapper
源码集成
将 wrapper
目录下的源文件添加到您的项目中进行编译
- Visual Studio
- 打开现有的 VS 解决方案
- 在解决方案资源管理器中右键单击解决方案 -> 添加 -> 新建项目 -> 静态库
- 选择项目类型为静态库
- 创建新项目后,在解决方案资源管理器中右键单击该项目 -> 添加 -> 现有项
- 将 wrapper 目录下所有源文件添加到项目中
- Xcode
- 打开现有的 Xcode 项目
- 在项目导航栏中右键单击项目 -> 添加文件到 "项目名"
- 选择 wrapper 目录将其添加到项目中
- Qt Creator
- 在 Qt Creator 中打开现有项目
- 在项目视图中右键单击项目 -> 添加新建项 -> 新建项目
- 选择项目类型为静态库
- 创建新项目后,在“项目”视图中右键单击该项目 -> 添加现有文件
- 将 wrapper 目录下所有源文件添加到项目中
现在您可以使用 C++ 封装层的接口进行开发了。
int main()
{
if(ret != nim::kNIMResSuccess){
return -1;
}
return 0;
}
运行时依赖
NIM 动态库依赖
- Windows
将 bin
目录中用到的动态库文件拷贝到可执行文件所在目录
- macOS
将 lib
目录中用到的动态库文件拷贝到可执行文件的 runpath 目录中,对于 app bundle 来说一般为 Contents/Frameworks
目录,即将 runpath
设置为 @executable_path/../Frameworks
- Linux
将 lib
目录中用到的动态库文件拷贝到可执行文件的 rpath 目录中,设置 rpath 为 $ORIGIN 表示可执行文件所在目录
系统依赖
- Windows
在 Windows 下 SDK 使用 VS2017 及其工具链进行编译,在您的应用部署前需要将 VS2017 运行时库安装到目标系统中或将依赖文件存放到执行程序可以搜索到的路径下。最新的 Visual Studio 2017 运行时库可以从微软官方网站下载
- macOS
最低系统版本要求 macOS 10.13
- Linux
最低 glibc 版本要求 2.23