Ubuntu下使用skynet笔记(1)

关于skynet的介绍可以参考下面两篇文章,Skynet设计综述GettingStarted,其中第二篇文章内容较新。根据skynet的Makefile可以看到其支持linux/freebsd/macosx三种平台编译使用。本文记录在Linux Ubuntu下使用时遇到的一些问题。

  1. 在Linux下需要使用jemalloc,而编译jemalloc又需要autoconf
  2. 然后make linux,正常情况即可完成skynet的编译

下面是笔者在编译时遇到的问题,及解决方法。更多问题也可以参考skynet的FAQ

错误:
checking for expr... /usr/bin/expr
checking for GNU M4 that supports accurate traces... configure: error: no acceptable m4 could be found in $PATH.
GNU M4 1.4.6 or later is required; 1.4.16 or newer is recommended.

解决方法:
apt-get insatll m4


错误:
./autogen.sh: 5: ./autogen.sh: autoconf: not found

解决方法:
wget http://ftp.gnu.org/gnu/autoconf/autoconf-latest.tar.gz


错误:
lua.c:81:31: fatal error: readline/readline.h: No such file or directory

解决方法:
apt-get install libreadline-dev

为了方便了解skynet编译时具体做了哪些事情,可以使用make -n将编译过程打印出来。

  1. 首先编译skynet/3rd/jemalloc,得到.so和.a

    ln -sf libjemalloc.so.2 lib/libjemalloc.so
    ar crus lib/libjemalloc.a src/jemalloc.o src/arena.o …

  2. 然后编译skynet/3rd/lua

    cd 3rd/lua && make CC=’cc -std=gnu99’ linux
    ar rcu liblua.a lapi.o lcode.o lctype.o ldebug.o ldo.o ldump.o lfunc.o lgc.o llex.o lmem.o lobject.o lopcodes.o lparser.o lstate.o lstring.o ltable.o ltm.o lundump.o lvm.o lzio.o lauxlib.o lbaselib.o lbitlib.o lcorolib.o ldblib.o liolib.o lmathlib.o loslib.o lstrlib.o ltablib.o lutf8lib.o loadlib.o linit.o

  3. 编译skynet

    cc -g -O2 -Wall -I3rd/lua -o skynet skynet-src/skynet_main.c skynet-src/skynet_handle.c skynet-src/skynet_module.c skynet-src/skynet_mq.c skynet-src/skynet_server.c skynet-src/skynet_start.c skynet-src/skynet_timer.c skynet-src/skynet_error.c skynet-src/skynet_harbor.c skynet-src/skynet_env.c skynet-src/skynet_monitor.c skynet-src/skynet_socket.c skynet-src/socket_server.c skynet-src/malloc_hook.c skynet-src/skynet_daemon.c skynet-src/skynet_log.c 3rd/lua/liblua.a 3rd/jemalloc/lib/libjemalloc_pic.a -Iskynet-src -I3rd/jemalloc/include/jemalloc -Wl,-E -lpthread -lm -ldl -lrt

  4. 根据service-src下代码编译得到cservice目录下的so

    cc -g -O2 -Wall -I3rd/lua -fPIC –shared service-src/service_snlua.c -o cservice/snlua.so -Iskynet-src

  5. 根据lualib-src下代码编译得到luaclib目录下的so

    cc -g -O2 -Wall -I3rd/lua -fPIC –shared lualib-src/lua-skynet.c lualib-src/lua-seri.c -o luaclib/skynet.so -Iskynet-src -Iservice-src -Ilualib-src

# make -n linux
make all PLAT=linux SKYNET_LIBS="-lpthread -lm -ldl -lrt" SHARED="-fPIC --shared" EXPORT="-Wl,-E" MALLOC_STATICLIB="3rd/jemalloc/lib/libjemalloc_pic.a" SKYNET_DEFINES=""
make[1]: Entering directory `/root/skynet/src/skynet'
cd 3rd/jemalloc && make CC=cc 
make[2]: Entering directory `/root/skynet/src/skynet/3rd/jemalloc'
mkdir -p src
cc -std=gnu99 -Wall -Werror=declaration-after-statement -Wsign-compare -pipe -g3 -fvisibility=hidden -O3 -funroll-loops -fPIC -DPIC -c -D_GNU_SOURCE -D_REENTRANT -Iinclude -Iinclude -o src/jemalloc.pic.o src/jemalloc.c
cc -MM -D_GNU_SOURCE -D_REENTRANT -Iinclude -Iinclude -MT src/jemalloc.pic.o -o src/jemalloc.pic.d src/jemalloc.c
mkdir -p src
cc -std=gnu99 -Wall -Werror=declaration-after-statement -Wsign-compare -pipe -g3 -fvisibility=hidden -O3 -funroll-loops -fPIC -DPIC -c -D_GNU_SOURCE -D_REENTRANT -Iinclude -Iinclude -o src/arena.pic.o src/arena.c
cc -MM -D_GNU_SOURCE -D_REENTRANT -Iinclude -Iinclude -MT src/arena.pic.o -o src/arena.pic.d src/arena.c
mkdir -p src
cc -std=gnu99 -Wall -Werror=declaration-after-statement -Wsign-compare -pipe -g3 -fvisibility=hidden -O3 -funroll-loops -fPIC -DPIC -c -D_GNU_SOURCE -D_REENTRANT -Iinclude -Iinclude -o src/atomic.pic.o src/atomic.c
cc -MM -D_GNU_SOURCE -D_REENTRANT -Iinclude -Iinclude -MT src/atomic.pic.o -o src/atomic.pic.d src/atomic.c
mkdir -p src
cc -std=gnu99 -Wall -Werror=declaration-after-statement -Wsign-compare -pipe -g3 -fvisibility=hidden -O3 -funroll-loops -fPIC -DPIC -c -D_GNU_SOURCE -D_REENTRANT -Iinclude -Iinclude -o src/base.pic.o src/base.c
cc -MM -D_GNU_SOURCE -D_REENTRANT -Iinclude -Iinclude -MT src/base.pic.o -o src/base.pic.d src/base.c
mkdir -p src
cc -std=gnu99 -Wall -Werror=declaration-after-statement -Wsign-compare -pipe -g3 -fvisibility=hidden -O3 -funroll-loops -fPIC -DPIC -c -D_GNU_SOURCE -D_REENTRANT -Iinclude -Iinclude -o src/bitmap.pic.o src/bitmap.c
cc -MM -D_GNU_SOURCE -D_REENTRANT -Iinclude -Iinclude -MT src/bitmap.pic.o -o src/bitmap.pic.d src/bitmap.c
mkdir -p src
cc -std=gnu99 -Wall -Werror=declaration-after-statement -Wsign-compare -pipe -g3 -fvisibility=hidden -O3 -funroll-loops -fPIC -DPIC -c -D_GNU_SOURCE -D_REENTRANT -Iinclude -Iinclude -o src/chunk.pic.o src/chunk.c
cc -MM -D_GNU_SOURCE -D_REENTRANT -Iinclude -Iinclude -MT src/chunk.pic.o -o src/chunk.pic.d src/chunk.c
mkdir -p src
cc -std=gnu99 -Wall -Werror=declaration-aft
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值