Lua脚本调用C共享库的最佳方式?

2023-11-24

我有更多的 Python 和 CTYPES 背景...并且正在尝试找出从 Lua 脚本调用标准 C 共享库的最佳方法。

我听说过“Alien”(http://alien.luaforge.net/),但不确定它的最新情况如何?意思是定期更新吗?

例如,我知道它是一个 SQLite Lua 库,但假设我想调用编译 SQLite 时创建的 SQLite 共享库?

例如:在我的例子中,lib 位于 /usr/local/lib/libsqlite3.so 中

如果我写一个小虚拟脚本只是为了看看它是否可以加载库

require "libsqlite3"

print "hello"

我收到以下错误:

debian@debian:~/Desktop/SQLite Test$ lua sqlite_test.lua
lua: error loading module 'libsqlite3' from file '/usr/local/lib/lua/5.2/libsqlite3.so':
    /usr/local/lib/lua/5.2/libsqlite3.so: undefined symbol: luaopen_libsqlite3
stack traceback:
    [C]: in ?
    [C]: in function 'require'
    sqlite_test.lua:1: in main chunk
    [C]: in ?
debian@debian:~/Desktop/SQLite Test$ 

这是否意味着 Lua 无法“开箱即用”调用共享库,而我必须使用 Alien 之类的东西?

我知道我还可以以包含 Lua 头文件的方式对共享库进行编码,并且我可以制作“Lua 函数”...我只是hoping我可以调用盒子上“标准”的共享库。

非常感谢帮助或建议;-)

Thanks

Lynton


Lua 无法直接调用 C 库。它不随 libffi 一起提供,因此不能像 ctypes 那样工作。

从历史上看,lua 被嵌入到应用程序中,应用程序又将所需的函数添加到 lua 表中,并提供 lua 堆栈操作来传递和返回参数。

Alien 是 libffi 的改编版本并且可以工作。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Lua脚本调用C共享库的最佳方式? 的相关文章

  • 如何在 Lua 中下载文件,但在运行时写入本地文件

    我正在尝试制作一个更新程序 以便当我的 Lua 应用程序过时时它将使用LuaSocket下载较新的 exe 文件 可以运行我的 Lua 代码 在这个更新程序中 我希望它显示到目前为止已下载的数量 但是 通过以下 HTTP 请求 它会阻止应用
  • Lua:“拖动”数组中的元素序列

    我正在尝试创建一个函数 将连续数量的元素 拖动 到数组中的新位置 并限制为数组的当前大小 其他项目应该围绕 拖动 的项目晃动 例如 如果我的数组有 7 个元素 并且我想拖动中间的三个 1 2 3 4 5 6 7 lt keys a b C
  • 如何使用循环将字符串连接成一个?

    有人可以帮我解决字符串连接问题吗 我从寄存器读取数据 它的函数 utf regAddr length 我得到带有十进制数字的表格 然后将其转换为十六进制并循环字符串 我需要将这些字符串连接成一个 Lua中没有像 这样的操作符 functio
  • 如何使用Lua脚本语言打开Web套接字?

    作为初学者 我想在基于 Linux 的服务器上使用 Lua 打开一个 Web 套接字 该服务器应允许 Android 客户端连接到它 你能给我一些用Lua打开网络套接字的示例代码吗 您两周前已经问过同样的问题并得到了回答 LUA 脚本 We
  • Lua - 尝试调用全局(零值)

    执行此代码时 出现错误 尝试调用全局 forId 零值 function execute args local itemid 526 local bone forId itemid this is where the error occur
  • 如何访问废弃的函数参数?

    在 Lua 中 调用带有多余参数的函数将简单地丢弃这些参数 有没有可能与debug库来访问这些被丢弃的参数 我不是在寻找可变参数函数 function test local info debug getinfo 1 u print info
  • 循环直到在表中找到 2 个特定值?

    我试图找到一种更聪明的方法来解决这个问题 这是与游戏相关的代码的摘录 它循环遍历每个背包的每个插槽 直到找到铲子和绳子 local continue local foundShovel foundRope for i 0 Container
  • 如何解密Lua字节码?

    早上好 我正在尝试破译 Moon 字节码 但我无法以任何方式 有人可以帮助我吗 我有这个 例如 code 27 76 117 97 81 0 1 4 4 4 8 0 如何将此字节码解密为文本 我已经在这里搜索 http www asciit
  • 检查lua中是否存在目录?

    如何检查 lua 中是否存在目录 如果可能的话最好不使用 LuaFileSystem 模块 尝试做类似以下 python 行的事情 os path isdir path 这是一种在 Unix 和 Windows 上都适用的方式 无需任何外部
  • Redis 排序集和解决关系

    我正在使用 Redis 排序集来存储我正在处理的项目的排名 我们没有预料到 我们想要如何处理关系 Redis 按字典顺序对具有相同分数的条目进行排序 但我们想要做的是对具有相同分数的所有条目给予相同的排名 例如在以下情况 redis 127
  • 用于嵌入式服务器的 Web 技术

    我最近开始了一个针对嵌入式设备的新 Web 开发项目 并希望征求一些有关使用技术的建议 该设备将提供 HTML 页面 其中包括用于从 JSON 服务器检索数据的 AJAX 代码 我们暂时使用 Cherokee 作为 Web 服务器 但我们并
  • 什么时候适合使用Lua这样的嵌入式脚本语言

    我玩 魔兽世界 大约有两年了 我对用来编写插件的 Lua 很好奇 由于到目前为止我读到的有关 Lua 的内容都是 快 轻 和 这太棒了 所以我想知道如何以及何时使用它 您需要在系统中嵌入像 Lua 这样的脚本语言的典型情况是什么 当您需要最
  • 如何在Conky中实现一个基本的Lua功能?

    我正在尝试向我的 Conky 添加一个函数 该函数打印字符串的长度以用于调试目的 代码位于名为的文件内test lua 非常简单 function test word return string len word end 我这样加载它 在我
  • 为什么 LuaJIT 这么好?

    编辑 不幸的是 LuaJIT 已从下面链接的比较中删除 This 比较 http shootout alioth debian org u64 which programming languages are fastest php编程语言的
  • lua中的权限问题

    是否需要在 corona build settings 中设置一些特定权限才能将高分永久保存在文件中 每次运行代码时都会出现 权限被拒绝 的错误 如何纠正这个错误 这是我尝试过的代码 function read score local f1
  • 去掉尾随零和小数点

    使用 Lua 我将数字格式化为可变位数并去掉尾随零 小数点 例如 string format precision f value gsub 0 1 gsub 值的类型为数字 正数 负数 整数 小数 所以任务已经解决了 但出于美学 教育和性能
  • 在Lua中获取前一天的日期

    谁能告诉我如何使用 Lua 获取 YYYY MM DD 格式的前一天日期 即 一个片段 它将返回运行当天的前一天的日期 Try print os date Y m d os time 24 60 60 严格来说 这只能保证在 POSIX 系
  • 如何在 emacs lua-mode 中配置缩进?

    完整的 emacs 新手在这里 我在 Ubuntu 上使用 emacs 23 1 1emacs 入门套件 https github com technomancy emacs starter kit 我主要在 lua 模式下工作 安装了pa
  • 如何终止Lua脚本?

    如何终止 Lua 脚本 现在我在 exit 方面遇到问题 我不知道为什么 这更像是一个 Minecraft ComputerCraft 问题 因为它使用了包含的 API 这是我的代码 while true do if turtle dete
  • 关闭 Löve2D 中的抗锯齿功能

    我在用着L ve2D http love2d org用于编写一个小游戏 L ve2D 是 Lua 的开源游戏引擎 我遇到的问题是 当您在非整数位置绘制精灵时 某些抗锯齿过滤器会自动应用于精灵 love graphics draw sprit

随机推荐

  • 给定起始位置和结束位置列表构造 Numpy 索引

    我有两个大小相同的 numpy array 对象 都是一维 其中一个包含起始索引位置列表 另一个包含结束索引位置列表 或者你可以说我有一个列表起始位置和窗口长度 如果重要的话 由起始位置和结束位置形成的切片保证不重叠 我试图弄清楚如何使用这
  • 防止 Maven 子 pom 中覆盖依赖版本

    我在父 pom 中有一个 dependencyManagement 部分 例如
  • R 绘制独立的函数图例

    我想通过 R 绘制具有独立图例的图 同时尊重色阶 这就是我所拥有的 library plotly X lt data frame xcoord 1 6 ycoord 1 6 score 1 6 gender c M M M F F F ag
  • 将事件路由到 eventhub EventProcessor

    我有不同类型的活动 例如 有些数据是遥测数据 有些是错误信息等 我认为创建多个 IEventProcessor 实现是一个好主意 每个实现对应一种事件类型 因此每个实现都会以不同的方式处理事件 就像写入文件或数据库一样 将事件路由到特定 E
  • 如何使用日期时间索引在 pandas 中进行插值重新索引?

    我有一个带有日期时间索引的系列 我想要的是使用其他一些任意日期时间索引来插入这些数据 本质上我想要的是如何使以下代码片段或多或少工作 from pandas import Series import datetime datetime in
  • tcpdf:图像质量差

    我正在使用 TCPDF 创建使用其 writeHTML 函数从 HTML 输入转换而来的 PDF 文件 但是 PDF 中的图像质量较差 而原始图像质量较高 如预期 图像为 PNG 格式 我已经尝试使用 SetJPEGQuality 100
  • 如何限制 Firebase 中产品的注册

    如果我创建一个新产品 使用简单的身份验证 有一个 创建用户 API 如何限制它 以便只有受邀请的电子邮件 通过电子邮件或通过一次性密钥 才能注册 似乎不太符合规则 但我可能遗漏了一些东西 首先 我应该指出 核心 Firebase API 使
  • 如何在Zend框架的不同模块中使用相同的模型?

    我正在致力于在现有项目中实现 Zend Framework 该项目具有公共营销区域 私人会员区域 管理站点和营销活动管理站点 目前 这些内容的组织很差 营销区域和会员区域的控制器脚本都位于网站的根目录下 然后是一个单独的管理文件夹和另一个用
  • F# Async.Parallel 是否可以加快计算速度?

    Async Parallel 结构真的有助于提高多核系统上的计算速度吗 这里是否以某种方式涉及 NET TPL 任务 open System let key Console ReadKey true let start System Dat
  • 网络共享上的 .NET 4.0 应用程序导致 SecurityException

    今天 我在尝试远程调试为 NET 4 0 运行时构建的应用程序时遇到了一个奇怪的问题 该应用程序驻留在网络共享上并由远程计算机执行 但是 由于 System Configuration ConfigurationManager GetSec
  • 一个衬垫可以重命名一堆文件

    我一直在寻找一个 Linux 命令行单行程序来一次重命名一堆文件 pattern1 a pattern1 b pattern1 c 命令执行后我应该得到 pattern2 a pattern2 b pattern2 c for i in p
  • ggplot特定粗线

    如何才能绘制出一条线比另一条线粗的线呢 我尝试使用geom line size X 但这会增加两条线的粗细 假设我想增加第一列的厚度 如何实现这一点 a lt cbind rnorm 100 rnorm 100 nav 1 10 sa lt
  • “python setup.py install”和“pip install”之间的区别

    我有一个外部包想要从 tar 文件安装到我的 python virtualenv 中 安装软件包的最佳方法是什么 我发现了两种方法可以做到这一点 解压 tar 文件 然后运行python setup py install在提取的目录内部 p
  • 无法创建新文件:设备尚未准备好

    我正在使用 Java 创建一个新文件 但出现异常 Exception in thread main java io IOException The device is not ready at java io WinNTFileSystem
  • 如何通过 Google Places Autocomplete API 以多种语言执行搜索来获取城市的唯一标识符​​?

    当在另一种语言 API 中再次查找同一城市以找到同一城市的这个地方时 我需要获取城市名称的唯一标识符 Example 我通过 Google API 自动完成位置进行搜索 如下所示 城市 纽约 结果是 纽约 NY 美国 国家代码 U S 例如
  • 通过 Javascript / jQuery 检测 Android 手机

    我如何检测正在使用的设备是移动网站的 Android 设备 我需要将某些CSS属性应用到Android平台 Thanks 看看那个 http davidwalsh name detect android JavaScript var ua
  • vscode 智能感知不工作

    我刚刚下载了适用于 linux ubuntu 14 04 的 Visual Studio 代码 我创建了一个简单的 test cpp 并在 vscode 中编写它 但智能感知不起作用 这是test cpp中的代码 struct test i
  • Redshift COPY 操作在 SQLAlchemy 中不起作用

    我正在尝试在 SQLAlchemy 中进行 Redshift COPY 当我在 psql 中执行以下 SQL 时 它可以正确地将对象从我的 S3 存储桶复制到我的 Redshift 表中 COPY posts FROM s3 mybucke
  • HashMap:以随机顺序迭代键值对

    我有一个 HashMap 每次获得迭代器时 我想以不同的随机顺序迭代它们的键值对 从概念上讲 我想在调用迭代器之前 洗牌 地图 或者如果您愿意 洗牌 迭代器 我看到有两个选择 1 使用 LinkedHashMap 的方法并在内部保留条目列表
  • Lua脚本调用C共享库的最佳方式?

    我有更多的 Python 和 CTYPES 背景 并且正在尝试找出从 Lua 脚本调用标准 C 共享库的最佳方法 我听说过 Alien http alien luaforge net 但不确定它的最新情况如何 意思是定期更新吗 例如 我知道