local?calc?
=
?require?
"
calc
"
print(calc.add(
20
,?
40
))
print(calc.sub(
20
,?
40
))
cc?
-
g?
-
D_DEBUG?
-
DDEBUG?
-
Wall?
-
I.
/
skynet
/
3rd
/
lua???
-
fPIC?
--
shared?lcalc.c?
-
o?calc.so
lua calc.lua
lua: error loading module 'calc' from file './calc.lua':
??????? ./calc.lua:3: too many C levels (limit is 200) in main function near '20'
stack traceback:
??????? [C]: in ?
??????? [C]: in function 'require'
??????? ./calc.lua:1: in main chunk
??????? [C]: in function 'require'
??????? ./calc.lua:1: in main chunk
??????? [C]: in function 'require'
??????? ./calc.lua:1: in main chunk
??????? [C]: in function 'require'
??????? ./calc.lua:1: in main chunk
??????? [C]: in function 'require'
??????? ...
??????? [C]: in function 'require'
??????? ./calc.lua:1: in main chunk
??????? [C]: in function 'require'
??????? ./calc.lua:1: in main chunk
??????? [C]: in function 'require'
??????? ./calc.lua:1: in main chunk
??????? [C]: in function 'require'
??????? ./calc.lua:1: in main chunk
??????? [C]: in function 'require'
??????? calc.lua:1: in main chunk
??????? [C]: in ?
一開始以為是 require 路徑的問題,但一直忽略了 too many C levels 這個錯
當 require calc 時, 它會一直死循環在加載 calc.lua
luaopen_calc() 改名 或 calc.lua 其中一個改名即可解決
當初,在skynet 見到 luaopen_skynet_c() & require "skynet.c" 很奇怪,為什么Lua的作者會這樣設計語言
現在想起來,好像有那么一點道理.