动态链接库中函数的调用

背景

当前我在/usr/lib64/目录中新加了个有c++代码编译的test.so文件,该so文件中有一个对外接口test_print(),请问我在组件中要怎样调用这个对外接口呢?

方案

方案1: 通过在组件的lua代码中采用如下方式:

local ffi = require 'ffi'

ffi.cdef[[
    int test_print();
]]

function demo:init()
    local status, result_or_err = pcall(function()
        return ffi.load("/usr/lib64/libtest.so")
    end)
    if status then
        self.lib_core = result_or_err
        local init_ret = self.lib_core.test_print()
    else
        self.lib_core = nil
    end
end

方案2:在lua代码中使用dlopen(“/usr/lib64/libtest.so”)这个接口,当前都是c代码中使用的该接口,lua代码中要怎样使用呢?

问题

1.请问是否还有其他方式可以实现在lua中调用.so库中接口?
2.上述方案1的方式是否可行?

方案一可行,前提是c代码有封装lua接口,可以参考AtomGit | GitCode - 全球开发者的开源社区,开源代码托管平台

前提是c代码有封装lua接口
----这个要怎样理解呢,能具体举例说明下吗?我的理解test_print()函数里面应该不需要在封装lua接口啥的吧,应该就是纯C代码实现即可吧?

em,看错了,你这种方式也是可以的。我举例的应该算第三种方法。