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
等开发包。