Skip to content

xiyoo0812/skynet-windows

 
 

Repository files navigation

关于skynet-windows Build status

skynet-windowsskynet 的windows平台的实现。本项目从skynet-mingw fork而来,对此版本进行了优化和更新。其主要特点是:

  1. skynet 以submodule链接,方便升级,确保不改
  2. 仅扩展了700行代码,方便维护。
  3. 自动更新skynet,自动构建,自动化测试,确保质量。
  4. 编译系统使用msys2。

编译

  1. 安装 msys2, 下载地址
  2. 安装 gcc make git
pacman -S gcc
pacman -S make
pacman -S git
  1. 克隆 git clone https://github.com/xiyoo0812/skynet-windows
  2. 更新 git submodule update --init --recursive
  3. 准备 ./prepare.sh
  4. 修改 skynet会加载动态库,因为编译lua的时候需要修改mingw的编译配置,加上-DLUA_USE_DLOPEN选项。
mingw:
	$(MAKE) "LUA_A=lua53.dll" "LUA_T=lua.exe" \
	"AR=$(CC) -shared -o" "RANLIB=strip --strip-unneeded" \
	"SYSCFLAGS=-DLUA_BUILD_AS_DLL -DLUA_USE_DLOPEN" "SYSLIBS=" "SYSLDFLAGS=-s" lua.exe
	$(MAKE) "LUAC_T=luac.exe" luac.exe
  1. 编译 make

常见问题

  1. 加载脚本的时候找不到so,通常是由于lua库没有使用动态库选项,解决见上面第6步。

测试

./skynet.exe examples/config        # Launch first skynet node  (Gate server) and a skynet-master (see config for standalone option)
./3rd/lua/lua examples/client.lua   # Launch a client, and try to input hello.

已知问题

  1. console服务不可用(无法对stdin进行select), 会提示如下出错信息,暂时没有解决方案。(同dpull版本)
stack traceback:
        [C]: in function 'assert'
        ./lualib/socket.lua:361: in function 'socket.lock'
        ./service/console.lua:15: in upvalue 'func'
        ./lualib/skynet.lua:452: in upvalue 'f'
        ./lualib/skynet.lua:105: in function <./lualib/skynet.lua:104>
  1. 使用 skynet.abort 无法退出,看堆栈卡在了系统中,暂时没有解决方案。(替代方案 os.exit(true) )(同dpull版本)
#0  0x77bd718c in ntdll!ZwWaitForMultipleObjects () from C:\WINDOWS\SYSTEM32\ntdll.dll
#1  0x74c0a4fa in WaitForMultipleObjectsEx () from C:\WINDOWS\SYSTEM32\KernelBase.dll
#2  0x74c0a3d8 in WaitForMultipleObjects () from C:\WINDOWS\SYSTEM32\KernelBase.dll
#3  0x6085be1c in pause () from D:\MinGW\msys\1.0\bin\msys-1.0.dll
#4  0x6085ccf1 in msys-1.0!cwait () from D:\MinGW\msys\1.0\bin\msys-1.0.dll
#5  0x6080dff4 in msys-1.0!cygwin_stackdump () from D:\MinGW\msys\1.0\bin\msys-1.0.dll
#6  0x00413fe5 in ?? ()
#7  0x00413e8f in ?? ()
#8  0x00412a1b in ?? ()
#9  0x0040f77b in ?? ()
#10 0x0040f151 in ?? ()
#11 0x00403869 in __mingw_opendir ()
#12 0x0000000a in ?? ()
#13 0x0069fe30 in ?? ()
#14 0x00000000 in ?? ()
  1. 启动的时候 skynet.readline 报错,有时间再看。
[:0100000b] lua call [0 to :100000b : 0 msgsz = 56] error 
: ./lualib/skynet.lua:643: ./lualib/skynet.lua:197: ./lualib/skynet/socket.lua:311: assertion failed!
stack traceback:
        [C]: in function 'assert'
        ./lualib/skynet/socket.lua:311: in function 'skynet.socket.readline'
        ./service/console.lua:16: in upvalue 'f'
        ./lualib/skynet.lua:127: in function <./lualib/skynet.lua:126>
stack traceback:
        [C]: in function 'assert'
        ./lualib/skynet.lua:643: in function 'skynet.dispatch_message'

About

skynet编译windows版

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C 63.8%
  • C++ 12.3%
  • Makefile 12.0%
  • Lua 11.1%
  • Shell 0.8%