Build

LaoZhongGu edited this page Oct 18, 2016 · 20 revisions

获取源代码

推荐使用 git 。

git clone https://github.com/cloudwu/skynet.git

或者下载最新的 release 包1,自行解开。但下载的源代码包中并不包含 jemalloc2 ,请自行下载放在 3rd/jemalloc 目录下。

编译工具

skynet 的开发环境是 Ubuntu Linux 。但同时也应该能在其它 Linux 平台编译运行。它同时支持 MacOSX 及 FreeBSD ,没有经过严格测试、不保证没有问题。

skynet 所有代码以及引用的第三方库都可以被支持 C99 的编译器编译。所以你需要先安装 gcc 4.4及以上版本。(Clang 应该也没有问题)。它还需要 GNU Make 以运行 Makefile 脚本。

关于 jemalloc2 和 malloc hook

skynet 对 malloc api 做了 hook ,用来统计 skynet 内部服务分别占用了多少内存。这个 hook 是用实现 malloc 等同名 api 以重载 libc 对应 api 实现的。同时,为了内存管理的高效,默认链接了 jemalloc 。

而在 MacOSX 下,这种 hook 手段是不成立的。需要额外编写 memory zone ,这将引入更多复杂的问题,所以直接在编译时就关闭了 jemalloc 。如果你在 linux 下也不想使用 jemalloc 以及 skynet 自带的服务内存统计模块,那么可以参考 platform.mk 中针对 macosx 的写法关闭它们。

注意:编译 jemalloc 需要先安装 autoconf 工具。

如果你是通过 git clone 得到的 skynet 的源代码,那么你应该已经安装了 git 。Makefile 里编写的规则会自动下载 jemalloc 的代码;如果你是直接下载的 skynet 源码包,就有可能无法自动工作。那么你可能需要手工把 jemalloc 下载到 3rd 目录下,或在 skynet 源码服务下运行 git init 将其初始化为一个 git 仓库,让 git submodule 可以正常工作。

编译

cd skynet
make linux

通常可以成功。

如果你不是 Linux 系统,那么可以在 make 后尝试 macosx 和 freebsd 两个选项。由于 freeBSD 默认的 make 不是 gnu make ,请用 gmake 。

通常,skynet 会作为一个框架在你的项目中使用,推荐你把 skynet 作为一个 submodule 引入。你可以在你的 Makefile 文件中调用 GNU Make 编译它。你可以把平台设置在 PLAT 这个环境变量中。

默认状态下,skynet 执行文件会被编译输出到 skynet 目录下。你很可能希望自定义输出位置,通过修改 SKYNET_BUILD_PATH 变量可以改变它。

如果你编译 jemalloc 有困难,可以考虑这样设置宏来避免编译它:

make linux MALLOC_STATICLIB= SKYNET_DEFINES=-DNOUSE_JEMALLOC

关于 lua

skynet 自带了一份 Lua 5.3 的源代码。并在官方版本的基础上做了一点小修改。

这是因为,skynet 框架有可能启动大量的 lua 虚拟机。而大量的 Lua 虚拟机中运行的是相同的代码。skynet 带的修改版 Lua 实现会尽量共享相同的 Lua 函数原型以节约内存、提高初始化 Lua 虚拟机的速度。其副作用是,通过 loadfile luaL_loadfile 等加载过的 lua 文件,不会再次从文件系统加载(但你可以通过 code cache 接口重置)。

另外,为了方便调试,skynet 给 lua vm 打了个补丁,可以在 lua 代码陷入死循环后,也可以从外部使其跳出3

如果你不喜欢这个设计,也可以链接自己的 Lua 库。方法是改写 Makefile 中的 LUA_LIB 以及 LUA_INC 变量。

注:skynet 需要 Lua 5.3 版,不支持 Lua 5.1 以及 LuaJIT 。

如果你在编译 lua 的过程中遇到问题,请仔细阅读:http://www.lua.org/manual/5.3/readme.html

Windows

skynet 没有支持 Windows 平台的计划。但社区中有 Mr.j 同学成功移植到 Windows 下4

sanikoyes 加入了windows平台的skynet支持,使用vs2013编译,支持skynet最新版,仅供学习/日常开发使用,由于性能方面的问题(event-select),请勿在生产环境使用windows版,地址在: https://github.com/sanikoyes/skynet/tree/vs2013

dpull 加入了使用 mingw编译的windows版,主要供项目内策划修改配置表后自测用,最新编译结果: Build status

如有这方面的需要,请自行联系 Community