问题标签 [luajit]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
556 浏览

c++ - Lua - 对表中函数的引用

如果我有一个Table包含 functions getValue(),setValue()等的全局表。我可以存储对的引用Table.getValue还是必须存储对的引用Table然后调用成员函数?

0 投票
2 回答
21757 浏览

compilation - 如何将 Lua 脚本编译成单个可执行文件,同时仍然获得快速的 LuaJIT 编译器?

如何将我的Lua脚本编译成单个可执行文件,同时获得LuaJIT的超快速性能优势?

背景:

  • 我的 Lua 脚本用于我创建的 Web 应用程序(例如托管http://example.com
  • 我目前的技术栈是 NGINX(Web 服务器)、Lua/LuaJIT(检索动态内容的语言)
  • 我有大约 50 多个.lua文件构成我的 Web 应用程序(来自模型/视图/控制器)
  • FreeBSD 9 操作系统

为了简化部署,我想将运行我的 Web 应用程序的所有 .lua 脚本编译为单个可执行文件。

  1. 这可能吗?如何?

    貌似Lua 官方自带了一个叫SRLua的库

  2. 将我的 .lua 编译为单个可执行文件有什么负面影响(例如性能会更差等)?
0 投票
1 回答
1079 浏览

macos - 在 Mac OS X 上结合 wxLua 和 LuaJIT

你如何在 Mac OS X (10.6.8) 上构建 wxLua 以便它使用 LuaJIT2 而不是标准的 Lua 解释器?

我努力了:

/Users/finnw/LuaJIT-2.0.0-beta9我构建 LuaJIT 的目录在哪里。

我还尝试复制src/libluajit.alib/liblua5.1.asrc/libluajit.solib/liblua5.1.so以及各种其他组合,例如将扩展名从更改.so.dylib

但是我仍然总是得到 Lua 而不是 LuaJIT(可以通过加载需要ffi模块的脚本来验证。)

如何强制它链接到 LuaJIT2?为什么该configure --with-lua-prefix选项不做它声称做的事情?

0 投票
1 回答
7336 浏览

c++ - 将lua脚本编译成dll?

我听说过使用 LuaJIT 将 Lua 代码编译成字节码,然后编译成静态库。

理想情况下,我希望能够将 Lua 代码编译成动态库,这样我就不必重建主可执行文件。

你能把Lua编译成dll吗?如果是这样,由于没有标题,您如何将其链接到 c++ 代码?最后,您将如何从程序内部运行 Lua 脚本?

0 投票
1 回答
625 浏览

c - 使用 LuaJIT 调用标准打开对话框会导致访问冲突

使用 LuaJIT 的 FFI遵循MSDN 的 GetOpenFileName 示例。我一直试图让这个工作两天,不仅对话框没有打开,而且整个事情都崩溃了。

当使用 OllyDdb 进行调试时,它会在comdlg32.dll的某处引发丑陋的访问冲突。

这是仅包含基本代码的概念证明。如果我指定结构大小为零,它会毫无问题地退出,GetLastError()会抛出87 (ERROR_INVALID_PARAMETER)

所以我认为问题与结构或 FFI 有关。

如果有人能够在这里阐明一些光...谢谢。

0 投票
1 回答
286 浏览

lua - luajit2进程之间的通信?

我可以在同一台机器上轻松启动两个或多个单独的 Lua 程序(在 LuaJIT2 上运行)。但是这些程序有什么方法可以交流吗?

我能想到的最好的解决方案是每个程序都可以编写一个程序可以读取的文本文件。但这是非常缓慢的解决方案(即使文本文件保存在虚拟 RAM 磁盘上)。

我知道thera是zeromq和其他可能对此有所帮助的东西......问题是指令太长而且复杂/令人困惑(至少对我来说)。

有什么建议吗?尤其是一些工作代码示例,无论多么简单,都会受到赞赏。甚至如何将一个变量的值从一个 LuaJIT2 进程传递到另一个。

(我使用的是 Windows XP SP3,如果这很重要的话......)

0 投票
4 回答
5296 浏览

callback - LuaJIT FFI 回调性能

LuaJIT FFI 文档提到从 C 调用回 Lua 代码相对较慢,建议尽可能避免使用它:

不要对性能敏感的工作使用回调:例如考虑一个数值积分例程,它需要一个用户定义的函数来积分。从 C 代码调用用户定义的 Lua 函数数百万次是个坏主意。回调开销对性能绝对有害。

对于新设计,请避免使用推送式 API(C 函数为每个结果重复调用回调)。而是使用拉式 API(重复调用 C 函数以获得新结果)。通过 FFI 从 Lua 到 C 的调用比反过来要快得多。大多数设计良好的库已经使用拉式 API(读/写、获取/放置)。

但是,它们并没有说明来自 C 的回调有多慢。如果我有一些我想加速使用回调的代码,如果我重写它以使用拉式 API,我大概可以期望多少加速?有没有人有任何基准比较使用每种 API 风格的等效功能的实现?

0 投票
2 回答
8946 浏览

lua - 如何将 cdata 结构转换为 lua 字符串?

我正在编写一个需要在 LuaJit 中读取一些复杂二进制消息的小应用程序。

我一直在使用 bit 模块和 string.rep 很多。然而,这一切都非常麻烦。我是使用 LuaJit 的新手,我认为使用 FFI 可能会更简单。

在 CI 中可以声明这样的结构:

在阅读 LuaJit 的 FFI 时,您似乎可以声明

然后我可以创建一个 mystruct 并访问如下字段:

但是,如何将其转换回 lua 字符串?

我试过这个,但它似乎没有达到我想要的效果。

还有这个:

产生以下错误“bad argument #1 to 'string' (cannot convert 'struct mystruct' to 'const char *')”

所以我尝试了一个演员表:

没有错误,但在电线上看起来有问题。

0 投票
2 回答
1520 浏览

android - 在 Mac 上为 Android 编译 LuaJit 2。汇编程序错误:lj_vm.s:5:错误:未知伪操作:`.private_extern'

请提供有关在 mac 上构建 android LuaJit 的建议或解决pseudo-op: '.private_extern'汇编程序错误的一般提示。

我在 Mac 上并按照说明在 doc/install 或http://luajit.org/install.html#android中编译 LuaJit2 :

我所做的唯一更改是更改linux-x86darwin-x86获得NDK交叉编译器。我还添加了TARGET_SYS=Linux(我尝试过使用和不使用)每个安装说明:“只要主机操作系统和目标操作系统不同,您就需要指定TARGET_SYS,否则会出现汇编程序或链接器错误……”</p>

所以我的构建脚本如下所示:

我的$ANDROID_NDK观点r8b NDK。但我也尝试了r8and r7,并且我尝试gcc 4.6了 with r8b。在所有情况下,我都会遇到类似的错误。

0 投票
1 回答
1347 浏览

android - 在cygwin下使用带有android的LuaJIT预构建静态库时的链接器问题

我想我昨天大部分时间都在努力解决这个问题,任何帮助都将不胜感激,让我非常高兴!即使是试图找到问题根源的下一步也是我目前所坚持的事情!

我有一个 Android 2.2 项目试图引用预构建的 LuaJIT 静态库,但 ndk-build 给了我这个错误:

我将 LuaJIT 构建为 liblua.a,我已经将它放在我的 JNI 目录的根目录中,并带有相关的头文件。我有一个 Android.mk,如下所示:

在 test_andrdoid.cpp 我有这个代码:

这似乎是一个链接器错误,由于某种原因,静态库文件没有被正确引用。但是,对我来说,makefile 似乎是正确的。

任何帮助将不胜感激!

  1. 首先:是否可以查看所有内容是如何链接在一起的,以及我的共享库模块是否真的可以访问静态库?

附加信息

这是我认为可能相关的额外信息!

建立图书馆

也许是静态库文件不正确?(有什么地方可以下载预建的来检查吗?)。我用这个脚本(来自 LuaJIT 网站)制作了它。我正在使用最新的稳定 LuaJIT,1.1.8

这可以很好地构建并在 /src/ 目录中创建一个 liblua.a。(我在上面运行了 nm,它列出了我期望的所有函数原型)。我不知道我还能做些什么来确保它真的是为 ARM 构建的吗?

NDKABI=8 表示我的目标是 Android 2.2

设置测试 Android 项目

我使用以下命令创建了一个全新的 2.2 android 项目:

Target 3 映射到我系统上的 Android 2.2(使用android list devices)。我创建了 jni 文件夹并有一个 test_android.h 和 test_android.cpp。然后我使用 ndk-build 来构建它们——当我不尝试引用 LuaJIT 时它工作得很好。当我尝试使用 Lua 时,出现以下错误:

完整的错误信息

我看到的大多数问题都是由于本地图书馆包括订单,因为我只有一个图书馆,这不应该是一个问题,并表明我已经设法得到了一些更根本的错误:)

更新

我已经构建了普通的 Lua 并将其添加为预构建的静态库,它工作正常。我怀疑它是如何构建 LuaJIT 的,但我不确定如何正确构建它,或者找到一个有效的预构建版本。