如何用现代的手段,编译石器时代的原始码?

构建环境

弃用 CentOS 改用 Debian 来运行服务端,Debian 相对将要停止维护的 CentOS 而言是更好的选择,而且常听到的 Ubuntu 也是其分支,版本则採用 buster,也就是当前最稳定的版本,加上编译 C 所需要的套件,于是我直接在 Dockerhub 上找封装好的 Docker Image 来用,我们可以从其 Dockerfile(定义档)中知道装了哪些套件。


资料库部分,由于 MySQL 已经被 Oracle 收购,开源社群转而投向保持著和 MySQL 有高度相容性且更为开放的 MariaDB 的怀抱,也因此我们直接选用 MariaDB 作为资料库引擎。


排除问题

首先我遇到的第一个问题,就是在非 c99 标准之下不允许我们在 for loop 中宣告变数。

C
for (int i=1;i<10;i++) { // errorint i;for (i=1;i<10;i++) {  // ok

虽然直接改 Code 就可以解决,但是因为要改的太多,所以选择直接在 CMake 设定档中加上 flag,就可以启动 c99 标准而顺利编译。

CMakeLists.txt

C
macro(use_c99)
  if (CMAKE_VERSION VERSION_LESS "3.1")
    if (CMAKE_C_COMPILER_ID STREQUAL "GNU")
      set (CMAKE_C_FLAGS "-std=gnu99 ${CMAKE_C_FLAGS}")
    endif ()
  else ()
    set (CMAKE_C_STANDARD 99)
  endif ()endmacro(use_c99)


第二个问题就是当我们使用 MariaDB 的时候,在编译阶段编译器会告诉我们找不到 mysql/mysql.h ,这很明显是因为我们换了资料库,所以相应的函式库也得调整。


saac/src/sasql.c

C
#include <mysql/mysql.h> // error#include <mariadb/mysql.h> // ok


saac/CMakeLists.txt

C
target_link_libraries(saac mysqlclient) // errortarget_link_libraries(saac mariadbclient) // ok



部署服务

最后就是把服务串连起来,服务端的架设就算完成了,这边我们写了 docker-compose.yml(定义档),简单来说就是把服务的 Port、关联性以及设定都写进定义档中,而这种将系统架构用 YAML 或 Code 的方式描述,就是所谓的 Infrastracture as code(IaC)。


这样做的好处就是只要一个指令就可以完整的启动服务端,因为在透过定义档启动后,事情都会交由工具本身去做,这边是利用 Docker Compose 来完成。


docker-compose.yml

C
version: '3.5'services:
  net:
    image: alpine:3.7
    network_mode: bridge
    ports:
      - 9065:9065
    command: tail -f /dev/null
    restart: always
  gmsv:
    image: tonypai/sa25_gmsv
    network_mode: service:net
    depends_on:
      - saac
    command: /bin/bash -i ./wait-for-it.sh 127.0.0.1:9300 -- ./gmsv
  saac:
    image: tonypai/sa25_saac
    network_mode: service:net
    depends_on:
      - db
    command: /bin/bash -i ./wait-for-it.sh 127.0.0.1:3306 -- ./saac
  db:
    image: mariadb:10
    network_mode: service:net
    volumes:
      - db-data:/var/lib/mysql
    restart: always
    environment:
      MYSQL_DATABASE: sa
      MYSQL_USER: user
      MYSQL_PASSWORD: pass
      MYSQL_ROOT_PASSWORD: admin

volumes:
  db-data:

结论

如果大家想玩看看的话,先去下载 Docker Desktop 把 Docker 环境建置起来,建立 docker-compose.yml 定义档。


然后下一行指令服务端就启动完成了。

C
docker-compose up gmsv saac



免责声明:本内容来于网络,不代表本站的观点和立场。

相关阅读

  • 石器时代 | TZ萨服回锅经验装备选择(2024年适用)

    石器时代 | TZ萨服回锅经验装备选择(2024年适用)

    前言石器的人一直来来去去有人退坑就有人回锅我发现很多回锅的朋友对于目前的经验装备不是很清楚我这边会大概叙述一下目前经验装的状况也让回锅的朋友可以有个初步的认知装备认识人宠装备:人物以及宠物都会获得额外的经验值宠物装备:仅有宠物会享受额外的经...

    2024.02.22 11:02:51作者:石器
  • 石器时代你不知道的事 | 泪之海圣兽,水青龙-多奇

    石器时代你不知道的事 | 泪之海圣兽,水青龙-多奇

    泪之海的真名.叫“宝尼海洋”,包括了三片海洋“多奇海洋”.“里欧海洋”.“古加海洋”“多奇”海龙就是其中一座未知名称的“多奇海洋”的守护者,多奇为泪之海多奇海洋守护兽。“里欧”、“古加”均未开放宠物名称多奇血值17 ~ 98血成長9.506...

    2024.01.30 12:13:48作者:访客
  • 台服石器时代 | 2023年中秋節&萬聖節任務完整攻略

    台服石器时代 | 2023年中秋節&萬聖節任務完整攻略

    任務建議:1.先解過2023年兔年任務,且熟悉每個任務道具如何取得(2023年兔年任務流程攻略)2.準備好一個大久野島通行證,此道具可以讓你省下不少石幣3.建議跟我寫的2023年兔年任務差不多,怪物強度大概再強一點,可找人幫忙4.萬聖節部分...

    2023.11.21 11:37:13作者:石器
  • 石器时代 | 石器:恶魔宝石疯狂送 波比跟你走

    石器时代 | 石器:恶魔宝石疯狂送 波比跟你走

       “到点了,到点了,活动开始了~带好活动需要的宠物快来参加吧!地点森林洞窟顶层,先到的还可以有机会得到小松鼠波比一只!”随着那熟悉的GM线上活动广播,今天晚上的GM在线活动“变废为宝”在上海网通2准时开始了。参加活动...

    2023.11.18 11:14:02作者:访客
  • 石器时代台服玄武/月見裝備經驗附魔與重置流程分享

    石器时代台服玄武/月見裝備經驗附魔與重置流程分享

    最近回鍋後買賣發現有些人對於附魔與重置還是不清楚簡單分享一下流程準備好要升級玄武/月見的腰/盾/以及非EXP的頭/身/武器帶好你的月見/玄武附魔然後到競技場找工程人員助理這邊會提醒你附魔前後效果不一樣尤其是月見腰帶/月見盾/玄武手套這種升級...

    2023.04.12 17:52:12作者:石器
  • 石器时代台服2023年兔年任務流程攻略

    石器时代台服2023年兔年任務流程攻略

    任務建議:(以下建議針對一般玩家,依照自己狀況斟酌變化準備)1.準備好最低限度的寶石裝備 (至少用便宜的特綠/綁防裝撐住,至少一件閃黃裝)  (大戶穿戰裝隨意)2.準備好有全體攻擊的寵物來清小怪(例如:玄武、紅白鬼頭、冰...

    2023.04.12 17:49:55作者:石器