2020-12-16

本文讲述了如何在Lua中正确加载C动态库complib.so,通过从loadlib到package.loadlib的转换,解决了尝试调用nil值和函数值的问题,最终实现成功调用库中的luaopen_complib函数并执行加法操作。
摘要由CSDN通过智能技术生成

loadlib加载动态库问题

【 lua文件中代码 】

local path = "/xxx/complib.so"
local f = loadlib(path, "luaopen_complib")

complib.so为要加载的C程序动态库,luaopen_complib为动态库初始化函数的函数名(complib.c文件中的)

【 错误提示】

lua: test.lua:6: attempt to call a nil value (global 'loadlib')
stack traceback:
	test.lua:6: in main chunk
	[C]: in ?
	dai

直接调用loadlib出错,修改后,如下:
【 第一次修改后程序 】

local path = "/xxx/complib.so"
local f = package.loadlib(path, "luaopen_complib")

print("12 + 13 = ", f.add(12, 13))

【 错误提示 】

lua: test.lua:8: attempt to index a function value (local 'f')
stack traceback:
	test.lua:8: in main chunk
	[C]: in ?
	siyu

接收package.loadlib的变量f,调用时应使用“ f() ”,使用括号
【 第二次修改后程序 】

local path = "/xxx/complib.so"
local f = package.loadlib(path, "luaopen_complib")

print("12 + 13 = ", f().add(12, 13))

【 运行成功 】(此例子调用C加法函数)

12 + 13 = 	25
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值