如何在lua中卸载动态库

我正在使用luajit2.0.4作为lua解释器。以下是情况:

在我加载像cjson.so这样的动态库之后,例如:

cjson = require('cjson')
a=cjson.new() -- 做我想要的事情

然后我需要覆盖库文件,这种情况下会出现热重新升级的情况,这时cjson.so_1和cjson.so可能是相同的)

[root@localhost lib]# cp cjson.so_1 cjson.so
cp:覆盖 `cjson.so'? y

它将强制内核截断cjson.so的pmap的物理内存,导致缺页 然后当我再次调用

a=cjson.new()

此时,内核会重新将cjson.so库复制到内存中,这次不解析全局符号。所以当我调用_new()_这样需要调用外部函数比如_malloc()_的函数时,会发生段错误。

我已经找到了一种通过编写C中的卸载函数来重新加载的方法,

我的问题是能否通过lua代码本身来实现这个功能?

点赞
用户8895039
用户8895039
遗憾的是,这是不可能的。

你必须使用 C/C++ 来解决这个问题,但不能使用 Lua,因为 Lua 的工作方式有限制,我希望有一个不同的答案,但 Lua 有它的限制。
2017-11-15 15:09:33