[TOC]
问题
新写了一个lua模块,其调用语句如下:
local xxx = require "xxx"用skynet调用时报以下错误:
lua loader error : ./lualib/skynet/require.lua:31: module 'xxx' not found:
no field package.preload['xxx']
no file './lualib/xxx.lua'
no file './lualib/xxx/init.lua'
no file './luaclib/xxx.so'
stack traceback:
[C]: in upvalue 'require'
./lualib/skynet/require.lua:31: in function 'skynet.require.require'
./examples/hotpatch.lua:4: in local 'main'
./lualib/loader.lua:50: in main chunk原因
- lua没有找到文件,
require "xxx"这里报错
解决
修改调用语句:
package.path = "./examples/?.lua;" .. package.path -- 指定目录
local hot = require "hot"问题
测试热更新机制时,print函数失效
原因
热更新时skynet屏蔽了print函数,导致print无法打印
解决
将print(xxx)函数修改为_G.print(xxx)
问题
local skynet = require "skynet"
local snax = require "skynet.snax"
skynet.start(function ()
local s = snax.newservice("snhello", "hello")
if not s then
print("create snax server fail")
return
end
snax.exit()
end)当执行到snax.exit退出时,报错如下:
[:00000008] init service failed: ./lualib/snax/interface.lua:82: ./examples/main_snax.lua:4: attempt to index a nil value (local 'skynet')
stack traceback:
...原因
snax.exit退出的是自己的服务,不是snhello服务
解决
将snax.exit()修改为snax.kill(s)
问题
lua: ./protobuf.lua:1: module 'protobuf.c' not found:
no field package.preload['protobuf.c']
no file '/usr/local/share/lua/5.3/protobuf/c.lua'
no file '/usr/local/share/lua/5.3/protobuf/c/init.lua'
no file '/usr/local/lib/lua/5.3/protobuf/c.lua'
no file '/usr/local/lib/lua/5.3/protobuf/c/init.lua'
no file './protobuf/c.lua'
no file './protobuf/c/init.lua'
no file '/usr/local/lib/lua/5.3/protobuf/c.so'
no file '/usr/local/lib/lua/5.3/loadall.so'
no file './protobuf/c.so'
no file '/usr/local/lib/lua/5.3/protobuf.so'
no file '/usr/local/lib/lua/5.3/loadall.so'
no file './protobuf.so'
stack traceback:
[C]: in function 'require'
./protobuf.lua:1: in main chunk
[C]: in function 'require'
PB_001A_TEST.lua:1: in main chunk
[C]: in ?原因
skynet的lua版本与pbc的lua版本不一致,skynet当前(20211011)的版本为v5.4.3,需要编译安装最新的lua版本;
解决
-
下载安装最新版lua
-
到lua官网下载最新版lua代码
wget https://www.lua.org/ftp/lua-5.4.3.tar.gz
-
解压文件
tar -zxvf lua-5.4.3.tar.gz
-
编译安装
cd lua-5.4.3.tar.gz make make install
-