42. 编程Part 2: 外部库

为编写游戏服务器,需要使用多种功能。 同时,有时还可能须要添加用于满足出版商和平台规约的功能。 为此,就会出现须要和外部库联动使用的情况。 此时,可通过如下过程使用外部库。

这里作为示例,链接了名为 sodium 的加密库。

42.1. 安装外部库

安装要使用的库。通常,外部库很可能以Ubuntu或Centos包的形式存在。当存在这种外部库包时,使用OS的包管理器(Ubuntu环境为 apt ,Centos环境为 yum )较为便利。

Note

对于Ubuntu或Centos,按照包含库文件的包,以及头文件也一同包含在内的包进行区分提供的情况较多。游戏服务器构建后,虽然也可以只有库包,但为了构建游戏服务器(即为了编译),须要连同头文件包也一同安装。通常,在Ubuntu环境中头文件包名字以 -dev 结尾,在Centos环境中名字以 -devel 结尾。

sodium如下所示。

Ubuntu

$ sudo apt-get install libsodium-dev

CentOS

$ sudo yum install libsodium-devel

42.2. 添加到CMakeLists.txt中

在通过 funapi_initiator 创建的源目录中,存在

  • CMakeLists.txt

  • src/CMakeLists.txt

两个Build配置文件。 修改第二个文件 src/CMakeLists.txt ,添加以下内容。 具体内容在代码后继续说明。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
...

###############################################################################
# Inclusion after setting variables.
###############################################################################

set(CMAKE_MODULE_PATH "/usr/share/funapi/cmake")

include(Funapi-src)

###############################################################################
# 추가 라이브러리 링크하기 위한 섹션
###############################################################################
# libsodium 라이브러리를 찾아서 LIBSODIUM 에 저장한다.
find_library(
  LIBSODIUM
  NAMES libsodium.so
  HINTS /usr/lib /usr/lib64
  REQUIRED)

# 위의 LIBSODIUM 에 저장되어있는 경로를 링크 대상으로 추가한다.
target_link_libraries(${PROJECT_NAME} ${LIBSODIUM})

...

42.2.1. 查找库

可利用cmake的 find_library 查找库。上面使用的 find_library 参数说明如下所示。

  • LIBSODIUM: 可以保存库位置的变量名。选择适合使用的名字。

  • NAMES {库文件名}: 库文件的实际名字。静态库指定以 .a 结尾的文件,而不是以 .so 结尾的文件。

  • HINTS {库目录}: 如果未安装到标准路径下,而是安装到其他位置时,须指定该路径。安装到标准路径时,可以省略。

  • REQUIRED: 设置成不存在相应库时build失败。

42.2.2. 链接库

利用cmake的 target_link_libraries 来实际链接相应库。

如想将前面指定的名字部分(上述示例中的 LIBSODIUM )作为参数进行传输,在连接器链接时添加相应库即可。

42.3. 发布到service环境中

若已使用 target_link_libraries ,按照 服务器管理Part 3: 服务器打包 中说明的内容将游戏服务器打包时,则将自动对所使用的库添加依赖。

安装已通过.deb或.rpm创建的游戏服务器后,即可在OS中查看我们添加的library是否已安装成功,如果未安装上,将提示报错消息,拒绝安装游戏服务器包。据此可立即了解是否遗漏了必要的库。

当发生这种报错消息时,和在 安装外部库 中的操作一样,安装必要的库即可。 对于上述示例中的libsodium,可以按如下所示安装库。

Ubuntu

$ sudo apt-get install libsodium18

Note

根据Ubuntu版本的不同,可以不是18,而是其他数字。

CentOS

$ sudo yum install libsodium

Tip

上述情况属于结束游戏服务器构建后将其发布到Live服务器上的情况,因此也可以不安装 -dev-devel 等开发包。