我正在使用luajit2.0.4作为lua解释器。情况如下:
在我用
加载像cjson.so之类的动态库之后cjson = require('cjson')
a=cjson.new() -- blahblah... do things i want
然后我需要覆盖lib文件,(热升级的情况,这里cjson.so_1和cjson.so可能是相同的)
[root@localhost lib]# cp cjson.so_1 cjson.so
cp: overwrite `cjson.so'? y
它会强制内核截断cjson.so的pmap的物理内存,导致页面丢失 然后当我打电话
a=cjson.new()
再一次,内核会将cjson.so lib重新复制到内存中,这次不会解析全局符号。因此,当我调用需要调用 malloc()等外部函数的 new()时,会发生段错误。
我已经找到了一种通过在C中编写卸载功能来重新加载的方法,
我的问题是我可以通过lua代码本身来做到这一点吗?
答案 0 :(得分:2)
可悲的是,这是不可能的。
由于Lua的工作方式,你必须使用C / C ++来处理这种情况,但不要使用Lua,我希望会有不同的答案,但是Lua已经达到了极限。