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 下编译使用 autoconf 和 automake。
# 切换到 fluffos v2017 分支
$ git checkout v2017
# 进入项目源码目录
$ cd src
# 检查环境配置并生成makefile
$ ./build.FluffOS
# 编译并安装驱动文件到 `bin` 目录
$ make install
编译好的驱动在 bin 目录中,包括 driver 和 portbind 二个文件,其中 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,可以参考以下教程
其它相关链接
官方编译说明
驱动源码