FluffOS在windows和ubuntu/centos/mac系统下的编译

fluffos项目地址国内镜像) 目前经测试可在linux、mac、windows(cygwin)平台下编译运行, linux 系统推荐 ubuntu、debian(本人在树莓派 raspbian 下测试也正常编译),windows下可以使用 cygwin(仅支持v2017版)或 msys2(支持v2019版) 和 wsl(推荐)

友情提示

为了不浪费时间,先给一个编译脚本,因为fluffos驱动一直在升级,每次升级都要更新并输入一系列指令编译,我们可以把更新和编译指令写成脚本,Ubuntu和WSL下推荐直接运行脚本编译驱动。

新建 build.sh 并运行 chmod +x build.sh 让脚本可执行,脚本内容如下:

#!/bin/bash

# 更新系统软件包列表
sudo apt update
# 安装软件包及依赖库
sudo apt install git bison build-essential autoconf automake cmake gcc g++ libjemalloc-dev zlib1g-dev libbz2-dev libssl-dev libmysqlclient-dev libsqlite3-dev libpq-dev libpcre3-dev libevent-dev libicu-dev libdw-dev binutils-dev libgtest-dev telnet python3 -y

# 进入当前用户的 home 目录
cd ~

# 如果 fluffos 目录不存在,则从 gitee 克隆 fluffos 仓库
if [ ! -d "fluffos" ]; then
    git clone https://gitee.com/mudren/fluffos.git
fi

# 进入 fluffos 目录并拉取最新代码
cd fluffos && git checkout . && git pull

# 如果 build 目录已存在,则删除
if [ -d "build" ]; then
    rm -rf build
fi

# 创建 build 目录并进入
mkdir build && cd build

# 记录开始时间
starttime=`date +'%Y-%m-%d %H:%M:%S'`

# 编译 fluffos,使用多线程编译,开启 SQLite 数据库和默认数据库支持
cmake -DPACKAGE_DB_SQLITE=2 -DPACKAGE_DB_DEFAULT_DB=2 .. && make -j$(nproc) install

# 记录结束时间
endtime=`date +'%Y-%m-%d %H:%M:%S'`

# 计算编译时间
start_seconds=$(date --date=" $starttime" +%s);
end_seconds=$(date --date="$endtime" +%s);

# 输出编译时间
echo Start: $starttime.
echo End: $endtime.
echo "Build Time: "$((end_seconds-start_seconds))"s."

# 复制驱动至系统目录
sudo cp bin/driver /usr/local/games/

这样我们每次只用输入 ./build.sh 即可自动更新并编译驱动了。编译完成自动把驱动复制到系统目录,这样可以在任何LIB中直接调用驱动。

以上脚本适合Ubuntu和WSL环境,如果你需要在Windows原生编译,可以在MSYS2 MINGW64下载中使用以下脚本:

#!/bin/bash

# 检查操作系统是否为 msys2
if [[ $(uname -o) != "Msys" ]]; then
    echo "This script should be run under msys2."
    exit 1
fi

# 更新系统软件包列表
pacman -Syu
# 安装软件包及依赖库
pacman --noconfirm -S --needed mingw-w64-x86_64-toolchain mingw-w64-x86_64-cmake mingw-w64-x86_64-zlib mingw-w64-x86_64-pcre mingw-w64-x86_64-icu mingw-w64-x86_64-sqlite3 mingw-w64-x86_64-jemalloc mingw-w64-x86_64-gtest bison make

# 进入当前用户的 home 目录
cd ~

# 如果 fluffos 目录不存在,则从 gitee 克隆 fluffos 仓库
if [ ! -d "fluffos" ]; then
    git clone https://gitee.com/mudren/fluffos.git
fi

# 进入 fluffos 目录并拉取最新代码
cd fluffos && git checkout . && git pull

# 如果 build 目录已存在,则删除
if [ -d "build" ]; then
    rm -rf build
fi

# 创建 build 目录并进入
mkdir build && cd build

# 记录开始时间
starttime=`date +'%Y-%m-%d %H:%M:%S'`

# 编译 fluffos,使用多线程编译,开启 SQLite 数据库和默认数据库支持
cmake -G "MSYS Makefiles" -DPACKAGE_DB_SQLITE=2 -DPACKAGE_DB_DEFAULT_DB=2 .. && make -j$(nproc) install

# 记录结束时间
endtime=`date +'%Y-%m-%d %H:%M:%S'`

# 计算编译时间
start_seconds=$(date --date=" $starttime" +%s);
end_seconds=$(date --date="$endtime" +%s);

# 输出编译时间
echo Start: $starttime.
echo End: $endtime.
echo "Build Time: "$((end_seconds-start_seconds))"s."

# 打开驱动目录
cd bin && explorer .

如果你要编译fluffos v2017或在macos下编译或更详细的了解驱动编译,请继续阅读以下内容。

环境配置

Ubuntu

Ubuntu 系统请执行以下指令安装编译所需的包:

sudo apt install git bison build-essential libjemalloc-dev zlib1g-dev libssl-dev libmysqlclient-dev libsqlite3-dev libpq-dev libpcre3-dev libevent-dev libicu-dev libdw-dev binutils-dev gcc g++ autoconf automake cmake python3 -y

 提示:如果安装报错请先apt update,如果libmysqlclient-dev安装提示不存在,请安装libmariadb-dev

请注意,不同版本编译要求不同,为了编译不出错,以上指令包括 v2017 和 v2019 可能所需的所有包。

CentOS 7

CentOS 系统下相对ubuntu来说,麻烦很多,因为cmake、g++、libevent-devel、libicu-devel版本过低,需要我们单独安装新版,不过经测试CentOS 7可正常编译。

编译环境配置请按以下顺序操作:

# 安装pip
yum -y install epel-release
yum -y install python-pip
# 安装cmake
pip install --upgrade cmake
# 安装devtoolset(g++)
yum -y install centos-release-scl
yum -y install devtoolset-8
scl enable devtoolset-8 bash
# 安装其它组件
yum -y install zlib-devel
# yum install libevent-devel
# yum install libicu-devel
yum -y install bison
yum -y install jemalloc-devel
yum -y install openssl-devel
yum -y install mariadb-devel
yum -y install binutils-devel
yum -y install git

下载源码编译安装libevent和libicu最新版:

# 安装libevent
$ wget https://github.com/libevent/libevent/releases/download/release-2.1.12-stable/libevent-2.1.12-stable.tar.gz
$ tar -zxvf libevent-2.1.12-stable.tar.gz
$ cd libevent-2.1.12-stable
$ ./configure –prefix=/usr
$ make -j4
$ make install
# 安装libicu
$ wget https://github.com/unicode-org/icu/releases/download/release-69-1/icu4c-69_1-src.tgz
$ tar -zxvf icu4c-69_1-src.tgz
$ cd icu/source/
$ ./configure -prefix=/usr
$ make -j4
$ make install
# 更新动态链接库
$ ldconfig

MAC

MAC 系统请执行以下指令安装编译所需的包:

brew install cmake pkg-config mysql pcre libgcrypt libevent openssl jemalloc icu4c

Windows

Windwos 系统下请使用 cygwin(v2017) 或 msys2(v2019) 或 WSL(推荐),如果是 cygwin 环境具体请看本文下方的 CYGWIN 编译(FluffOS v2017),如果是 msys2 环境具体请看本文下方的 MSYS2 编译(FluffOS v2019),如果是 WSL,具体编译操作和 Ubuntu 下完全一样。

编译说明

不管是 v2017 还是 v2019,编译配置文件都为 src 下面的 local_options 文件,请根据需要修改(非特别需求,推荐使用默认配置),如果需要驱动旧版MUD,请 #undef SENSIBLE_MODIFIERS即可。

GBK最新版commit为:ef5e86a300c40e904f91b90d83e2d991698410bf

下载fluffos

# 使用 git 下载fluffos最新版源代码
$ git clone https://github.com/fluffos/fluffos.git
# 如果下载过慢,可使用以下国内镜像地址
$ git clone https://gitee.com/mudren/fluffos.git
# 进入fluffos目录
$ cd fluffos

提示:如果出现git: command not found的错误,请先使用以下指令安装git:

# ubuntu
sudo apt install git
# centos
sudo yum install git

v2017编译指令

2017 下编译使用 autoconfautomake

# 切换到 fluffos v2017 分支
$ git checkout v2017
# 进入项目源码目录
$ cd src
# 检查环境配置并生成makefile
$ ./build.FluffOS
# 编译并安装驱动文件到 `bin` 目录
$ make install

编译好的驱动在 bin 目录中,包括 driverportbind 二个文件,其中 driver 是我们需要的驱动程序。

补充说明,如果编译v2017报如下错误,是缺少python:


[CC] vm/internal/compiler/lex.o
vm/internal/compiler/lex.cc:36:10: fatal error: vm/internal/options.autogen.h: No such file or directory
   36 | #include "vm/internal/options.autogen.h"
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
make: *** [Makefile:64: vm/internal/compiler/lex.o] Error 1

注意,重点是要存在/usr/bin/python,如果你的系统中安装了python3还是报错,请创建python软连接后编译

sudo ln -s python3 python

v2019编译指令

2019 下编译使用 cmake

# 创建并进入 `build` 目录
$ mkdir build && cd build
# 检查环境配置并生成makefile
$ cmake ..
# 编译并安装驱动到 `build/bin` 目录
#(`-j4`的4是CPU核心数,加速编译用,可修改)
$ make -j4 install

编译好的驱动在 build/bin 目录中,其中文件 driver 是我们需要的驱动程序,www 目录为 websocket 所需的模拟终端,需要放到LIB目录中,include 目录中为驱动定义由 mudlib 使用的头文件,std 目录中的 json.c 为 json 模拟外部函数。

MACOS 需要使用以下方式编译:

OPENSSL_ROOT_DIR="/usr/local/opt/openssl" ICU_ROOT="/usr/local/opt/icu4c" cmake ..
开启或关闭包

注意,如果不需要某个包,请使用-DPACKAGE_XXX=OFF,如果要开启某个包,请使用-DPACKAGE_XXX=ON,具体类似以下指令编译:

cmake -DPACKAGE_DB=OFF ..
多数据库类型支持

FlufFOS 支持 MYSQL, SQLITE3 和 PostgreSQL,驱动编译默认开启MySQL数据库支持,如果需要支持多种数据库,请使用类似以下指令:

cmake -DPACKAGE_DB=ON -DPACKAGE_DB_MYSQL=1 -DPACKAGE_DB_SQLITE=2 -DPACKAGE_DB_POSTGRESQL=3 -DPACKAGE_DB_DEFAULT_DB=1 .. && make -j4 install

编译的驱动默认定义了以下数据库类型的宏:

  • __USE_MYSQL__ - 值为1
  • __USE_SQLITE3__ - 值为2
  • __USE_POSTGRE__ - 值为3
  • __DEFAULT_DB__ - 值为1
静态编译

默认编译为动态编译,仅针对当前CPU优化,如果需要静态编译,请使用以下指令编译:

cmake -DMARCH_NATIVE=OFF -DSTATIC=ON ..
驱动调试

如果游戏运行出现crash,可以编译Debug版:

cmake -DCMAKE_BUILD_TYPE=Debug ..
external_start

如果需要驱动支持执行外部指令,需开启external_start外部函数:

cmake -DPACKAGE_EXTERNAL=ON .. && make -j4 install

Windows 系统编译

Windows系统下可以使用 CYGWIN(针对v2017) 或 MSYS2(针对v2019) 编译。

MSYS2 编译(FluffOS v2019)

MSYS2 官方网站:https://www.msys2.org/ 下载安装后需运行 Mingw-w64 64 bit,更新系统并安装必须的包,国外镜像速度慢,最新版配置中包括了国内镜像,可以根据以下方式修改配置:

pacman 的配置

编辑 /etc/pacman.d/mirrorlist.mingw32 ,把以下镜像放在文件开头:

Server = http://mirror.bit.edu.cn/msys2/mingw/i686/
Server = http://mirrors.ustc.edu.cn/msys2/mingw/i686/
Server = https://mirrors.sjtug.sjtu.edu.cn/msys2/mingw/i686/
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/i686/

编辑 /etc/pacman.d/mirrorlist.mingw64 ,把以下镜像放在文件开头:

Server = http://mirror.bit.edu.cn/msys2/mingw/x86_64/
Server = http://mirrors.ustc.edu.cn/msys2/mingw/x86_64/
Server = https://mirrors.sjtug.sjtu.edu.cn/msys2/mingw/x86_64/
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/x86_64/

编辑 /etc/pacman.d/mirrorlist.msys ,把以下镜像放在文件开头:

Server = http://mirror.bit.edu.cn/msys2/msys/$arch/
Server = http://mirrors.ustc.edu.cn/msys2/msys/$arch/
Server = https://mirrors.sjtug.sjtu.edu.cn/msys2/msys/$arch/
Server = https://mirrors.tuna.tsinghua.edu.cn/msys2/msys/$arch/

然后执行 pacman -Sy 刷新软件包数据即可。

fluffos 编译

系统配置:

$ pacman -Syu
$ pacman --noconfirm -S --needed mingw-w64-x86_64-toolchain mingw-w64-x86_64-cmake mingw-w64-x86_64-zlib mingw-w64-x86_64-pcre mingw-w64-x86_64-icu mingw-w64-x86_64-sqlite3 mingw-w64-x86_64-jemalloc mingw-w64-x86_64-gtest bison make

编译指令:

# 下载驱动源码
$ git clone https://gitee.com/mudren/fluffos.git
# 进入fluffos目录
$ cd fluffos
# 创建并进入编译目录
$ mkdir build && cd build
# 编译环境检查并生成makefile
$ cmake -G "MSYS Makefiles" ..
# 编译驱动
$ make -j$(nproc) install

编译和Ubuntu系统类似,唯一不同的是要指定makefile的生成器为MSYS Makefiles

CYGWIN 编译(FluffOS v2017)

CYGWIN 官方网站:https://www.cygwin.com/

需要安装以下包,可以使用阿里云镜像下载包:http://mirrors.aliyun.com/cygwin/

  • autoconf
  • automake
  • binutils
  • bison
  • gcc-core
  • gcc-g++
  • git
  • libcrypt-devel
  • libevent-devel(请选择2.0.22-1版本)
  • libiconv-devel
  • libpcre-devel
  • make
  • python3
  • zlib-devel

以下为某些版本可能需要的包:

  • cmake
  • libicu-devel
  • libmariadb-devel
  • libsqlite3-devel

再次强调,libevent-devel请选择2.0.22-1版本,对应cygevent-2-0-5.dll。不要选最新版,否则编译的驱动运行会crash。

安装完以上包后,进入cygwin终端,下载驱动源码并切换至v2017编译即可,编译方式和其它系统一样,具体请看本文前面关于fluffos v2017编译的说明。

注意 CYGWIN不支持v2019最新版,请使用以下指令滚回到可以编译的版本并使用 cmake 编译,此版本为GBK版,不推荐使用:

$ git reset --hard c64dc1bbebb2a2057ecd1cdae07fc4e2659feb13
$ mkdir build && cd build
$ cmake ..
$ make install

此版本和v2017差别,如果要支持WEBSOCKET和utf-8,只能使用MSYS2编译v2019新版本。

如果在 cygwin 下编译2019版报类似以下 Could not find "mysql.h" 的错误:

CMake Error at cmake/FindMySQL.cmake:512 (message):
  Could not find "mysql.h" in "/usr/include/mysql;/usr/include/mysql/mysql"
  found from running "/usr/bin/mysql_config"

请在 cmake 目录下的文件 FindMySQL.cmake 代码 510 行位置加入以下代码:


    # In case mysql_config returns several paths: mysql.h in first
    LIST(LENGTH MYSQL_INCLUDE_DIR n)
    IF( ${n} GREATER 1)
        LIST(GET MYSQL_INCLUDE_DIR 0 MYSQL_INCLUDE_DIR)
    ENDIF()

或者使用指令 cmake -DPACKAGE_DB=OFF .. 编译。

CYGWIN下编译好的driver可以直接使用,如果要在CYGWIN以外单独使用,需要把需要的 dll 文件和 driver.exe 一起打包,具体需要哪些 dll 文件,可以使用 ldd driver.exe查看,或直接运行driver.exe看报什么错,所需的 dll 文件都在CYGWIN下的/bin/目录中。

另外,在fluffos源码中附带了一个测试LIB testsuite,我们可以使用编译好的 driver 直接驱动这个LIB,并连接游戏。


如果你不想自己编译,也可以来这里直接下载本人编译好的版本

如果你需要在驱动中增加自定义efun,可以参考以下教程

其它相关链接

官方编译说明

  1. v2017
  2. v2019

驱动源码

  1. github官方
  2. gitee镜像
京ICP备13031296号-4