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