如何在 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 有其局限性。