disemboltura edited this page Oct 11, 2017 · 24 revisions

获取源代码

推荐使用 git 。

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

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

编译工具

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

mac osx

brew install readline autoconf

centos

yum install -y readline-devel autoconf

ubuntu

apt-get install readline-dev autoconf
apt-get install libreadline-dev autoconf  (for ubuntu 16.04)

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

You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.