运行loadlib()提示attempt to call global ‘loadlib’ (a nil value)

2009年的时候用过lua,当时在windows上写金山急救箱的恶意软件库引擎。

时隔多年,又要玩一把lua. 重拾lua,在lua控制台用loadlib载入动态链接库时出错:

> loadlib("libhello.so", "*")
stdin:1: attempt to call global 'loadlib' (a nil value)
stack traceback:
    stdin:1: in main chunk
    [C]: in ?

Lua表示在全局域中没有loadlib。google后发现两种解决方案:

第一种认为这种错误是因为没有把loadlib编译进lua中,需要改makefile.如此贴的楼主所述: http://lua-users.org/lists/lua-l/2009-02/msg00463.html

第二种是在csdn上的贴子,要改lua的源文件中的一个define,实际上这种方法也是可以在makefile中define一个变量的。

不过!!!

问题其实更简单,不需要改什么makefile文件:

http://lua-users.org/lists/lua-l/2009-02/msg00466.html

lua在5.0以后,loadlib已经不在全局域中了,loadlib在package名字空间中了。

这样就好了:

package.loadlib("libhello.so", "*")

实际上,loadlib是一个底层的函数。不像require,loadlib不在path里进行查找,也不自动添加文件名后缀。这个函数在某些平台上不被支持,因为ANSI并没有要求支持动态链接库。

copyright ykyi.net