如何在 lua 中卸载动态库
how to unload dynamic lib in lua
我正在使用 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 库重新复制到内存中,这次不解析全局符号。所以当我调用 new() 需要调用外部函数如 malloc() 时,会发生段错误。
我已经找到了一种通过在 C 中编写卸载函数来重新加载的方法,
我的问题是我可以通过 lua 代码本身来做到这一点吗?
遗憾的是,这是不可能的。
由于 Lua 的工作方式,您必须使用 C/C++ 来处理这种情况,而不是使用 Lua,我希望这样'答案不同,但 Lua 有其局限性。
我正在使用 luajit2.0.4 作为 lua 解释器。这是情况:
在我使用
加载动态库后 cjson.socjson = 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 库重新复制到内存中,这次不解析全局符号。所以当我调用 new() 需要调用外部函数如 malloc() 时,会发生段错误。
我已经找到了一种通过在 C 中编写卸载函数来重新加载的方法,
我的问题是我可以通过 lua 代码本身来做到这一点吗?
遗憾的是,这是不可能的。
由于 Lua 的工作方式,您必须使用 C/C++ 来处理这种情况,而不是使用 Lua,我希望这样'答案不同,但 Lua 有其局限性。