NIM 跨平台 C++ SDK
载入中...
搜索中...
未找到
V1 API 接入指引

SDK 目录结构及主要文件介绍

├─bin
├─doxygen
├─include
├─lib
├─syslib
└─wrapper
  • bin/lib 目录存放 NIM SDK 的动态库文件, 在您发布时请打包使用到的模块, .lib后缀为 Windows 下的动态库符号链接文件
    • (lib)nim(.dll|.so|.dylib): 即时通讯, 含圈组
    • (lib)nim_chatroom(.dll|.so|.dylib): 聊天室
    • (lib)h_available(.dll|.so|.dylib): 高可用模块, 被以上三个模块所依赖
    • (lib)nim_tools_http(.dll|.so|.dylib): http 工具库, 若不使用 wrapper/nim_tools_cpp_wrapper/nim_tools_http_cpp.h 中的接口可去除
    • nim_audio.dll: 音频解码库, 仅支持 Windows 环境, 若不使用 wrapper/nim_tools_cpp_wrapper/nim_audio_cpp.h 中的接口可去除
    • nrtc.dll: 音视频通话库, 仅支持 Windows 环境, 若不使用 wrapper/nim_cpp_wrapper/api/nim_cpp_vchat.h 中的接口可去除
    • node-nim.node: NIM SDK Node 封装层, 用于 Electron 以及 Node.js 环境下的接入, 其他情况可去除
    • 其他如 msvcp120.dll、msvcr120.dll 等(系统)依赖
  • 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.txtconanfile.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()
{
auto ret = nim::Client::Init("appKey", "appDataDir", "", config);
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
NIM集合头文件
SDK初始化参数
Definition: nim_client_helper.h:25

传统方式接入

includewrapper 目录添加到头文件搜索路径中

  • Visual Studio
    右键项目 -> 属性 -> C/C++ -> 常规 -> 附加包含目录
  • Xcode
    左侧导航栏 -> 项目 -> Build Settings -> 搜索 Header Search Pathss
  • Qt Creator
    # .pro 文件
    INCLUDEPATH += include wrapper

静态库集成

编译 wrapper 目录下的源文件生成静态库,产物会输出到 exports 目录下

  • Windows
> md build
> cmake -S wrapper -B build -G "Visual Studio 15 2017 Win64" -DCMAKE_INSTALL_PREFIX=exports
> cmake --build build --config Release --target install
  • macOS
> mkdir build
> cmake -S wrapper -B build -G "Xcode" -DCMAKE_INSTALL_PREFIX=exports
> cmake --build build --config Release --target install
  • Linux
> 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
修改命令中的 ReleaseDebug 来生成 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()
{
auto ret = nim::Client::Init("appKey", "appDataDir", "", config);
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