标签: luajit

LuaJIT需要模块错误

require "utils.lua"
stdin:1: module 'utils.lua' not found:
        no field package.preload['utils.lua']
        no file 'D:\blizzard\Projects\Lua'
        no file '.\utils\lua.dll'
        no file 'D:\blizzard\Projects\Lua\utils\lua.dll'
        no file 'D:\blizzard\Projects\Lua\loadall.dll'
        no file '.\utils.dll'
        no file 'D:\blizzard\Projects\Lua\utils.dll'
        no file 'D:\blizzard\Projects\Lua\loadall.dll'
Run Code Online (Sandbox Code Playgroud)

为什么LuaJIT搜索.dll而不是.lua以及如何解决此问题?

lua luajit

6
推荐指数
1
解决办法
4803
查看次数

LuaJIT没有看到LuaRocks安装的岩石

lua -e"print(package.path)"

./?.lua;/usr/share/lua/5.1/?.lua;/usr/share/lua/5.1/?/init.lua;/usr/lib/lua/5.1/?.lua;/usr/ LIB/LUA/5.1 /?/ init.lua

luajit -e"print(package.path)"

./?.lua;/usr/local/share/luajit-2.0.0-beta8/?.lua;/usr/local/share/lua/5.1/?.lua;/usr/local/share/lua/5.1 /?/init.lua

我试过附加lua的package.path,尽管没有骰子.LuaJIT似乎无法找到任何岩石,这很奇怪.我该怎么办?

lua luajit luarocks

6
推荐指数
2
解决办法
4494
查看次数

将C结构指针传递给lua脚本

我想知道有没有办法将结构指针传递给lua脚本,并从lua到达它的成员而不复制(用于读写目的).

那么,例如是否可以直接通过其指针覆盖ac结构的成员?

(我正在使用luajit)

c lua luajit

6
推荐指数
2
解决办法
8545
查看次数

如何将指针传递给LuaJIT ffi以用作out参数?

假设有以下C代码:

struct Foo { int dummy; }
int tryToAllocateFoo(Foo ** dest);
Run Code Online (Sandbox Code Playgroud)

...如何在LuaJIT中进行以下操作?

Foo * pFoo = NULL;
tryToAllocateFoo(&pFoo);
Run Code Online (Sandbox Code Playgroud)

lua ffi luajit

6
推荐指数
1
解决办法
3278
查看次数

如果我在运行Luajit或PUC Lua 5.1,我如何在运行时检测到?

我正在为我的Lua项目编写一些测试脚本,我想确保它们在可用的不同Lua版本下正确运行.由于我的单元测试框架可能使用错误的Lua版本,如果我错误配置它,我希望是额外的安全,并在运行时检查我的测试运行的Lua版本.最好的方法是什么?

我知道分开5.1和5.2的快速方法是检查_VERSION全局,但我如何区分常规Lua 5.1和LuaJIT?

lua luajit

6
推荐指数
1
解决办法
2509
查看次数

lua_open使用luaJIT返回null

使用最近的luaJIT lua_open返回null.常规的lua库不会发生这种情况.

lua_State *L = lua_open();
std::cout << L << std::endl;
Run Code Online (Sandbox Code Playgroud)

输出: 0x0

我怎样才能让luaJIT工作?

SSCCE:

#include <iostream>
#include <luajit-2.0/lua.hpp>
//linked library: libluajit-5.1.a

int main(int argc, const char * argv[])
{
    lua_State *L = luaL_newstate(); // lua_open();
    std::cout << L << std::endl; // 0x0
}
Run Code Online (Sandbox Code Playgroud)

其他信息:从源内置在OSX 10.9(尝试都2.0.2和从GIT)与makemake install.使用编译器:

$ cc --version
Apple LLVM version 5.0 (clang-500.2.79) (based on LLVM 3.3svn)
Target: x86_64-apple-darwin13.0.0
Thread model: posix
Run Code Online (Sandbox Code Playgroud)

(使用luajit命令行应用程序luajit工作正常,测试脚本可以正常执行.)

c++ lua embedding luajit lua-api

6
推荐指数
1
解决办法
2156
查看次数

在没有额外分配的情况下从 Lua 修改 main() 中的 C++ 数组

我正在绘制一个小的 C++ 程序,它将把数组传递给 Lua 并在那里修改它们,我打算在程序中读取一个 lua 脚本,这样我就可以修改它而无需重新编译程序

我的第一个障碍是确保 Lua 能够修改已经分配的数组,而不是在 Lua 空间中再次分配它们。数据将是浮动的,并且大小会非常大,但我现在从很小的地方开始。

为了简化这个接口,我尝试了 LuaBridge 2.6,但它没有提供预期的结果。下面是一个完全“工作”的程序。

#include <iostream>
#include <cstdint>
#include <cstring>
#include <vector>
#include <lua5.3/lua.hpp>
#include <LuaBridge/LuaBridge.h>

int main(void)
    {
    const uint32_t      LENGTH = 512 * 256;
    std::vector <float> input(LENGTH),
                        output(LENGTH);

    memset(output.data(), 0, LENGTH * sizeof(float));   // Zero the output
    for(uint32_t i = 0; i < LENGTH; i++)                // Populate input
        input[i] = (float)i + 0.5f;

    lua_State *luastate = luaL_newstate();
    luabridge::push(luastate, input.data());    // Supposedly passing a pointer to the first …
Run Code Online (Sandbox Code Playgroud)

c++ lua luajit luabridge

6
推荐指数
1
解决办法
256
查看次数

使用LuaJIT编写脚本并有选择地沙盒化FFI

在尝试并见证了我可以将Lua和LuaJIT集成到我的游戏引擎中的难以置信的轻松之后,我确信这是我想要使用的脚本语言.我想将它用于我的AI,单位描述,地图触发器等等.(尽可能真的).这个问题不仅适用于gamedev,我可以想象创建一个可编写脚本的编辑器或窗口管理器,它可以加载外部脚本(例如:使用python和包控制的sublime文本)

但现在我有一个难题:我非常感谢LuaJIT FFI提供的易用性,以便绑定到我的引擎,但我不想提供FFI的免费统治来映射作者.通过FFI进行lua-to-c调用的令人难以置信的速度(当JITted时)也是我真正想要的.

理想情况下,我会编写自己的包装器Lua文件,用FFI绑定到我的引擎,并导出一个很好的模块供地图作者和模拟器使用.我的替代方案是编写一个vanilla lua模块,这可能但更麻烦和更慢.

我在编译luajit时无法禁用FFI,因为显然我想自己使用它,但我没有看到如何在每个脚本或每个模块的基础上限制FFI.显然,FFI需要在我加载模块的lua_State中处于活动状态(之后我无法开始加载用户修改的脚本).那我该怎么办?它甚至可能吗?

编辑:在我看来,理想的工作流程是:

  1. 打开卢安州
  2. 加载所有模块(luaL_openlibs()),FFI也被预加载
  3. 加载我的.lua模块,使用FFI(这是引擎绑定,它们是可信文件,因此可以使用FFI)
  4. 禁用选择本机模块和函数:os,ffi,...(这是缺少的步骤)
  5. 执行用户提供的脚本(这些是不可信的,我不希望他们访问FFI)
  6. 可选:寻找一种方法来重新加载lua模块以实现快速编辑循环,这将涉及重新启用FFI和其他模块.(不知道怎么做)

注意:我知道这仍然不是一个完美的(甚至是好的沙盒),正如Mike Pall已经在他的一些邮件中指出的那样,但我仍然不想让地图作者访问FFI.

security lua sandbox ffi luajit

5
推荐指数
1
解决办法
2097
查看次数

我可以创建函数`extern"c"`

我有一些cpp文件,我想用FFI将它们与LuaJit结合起来.

但问题是,我必须extern "c"为几乎每个函数添加符号,以使FFI可以访问它们.

有没有更简单的方法来完成这项工作?

c c++ lua ffi luajit

5
推荐指数
1
解决办法
262
查看次数

Lua/Luajit:同时编制索引和命名方法?

Lua的PILLuajit FFI教程给了两种用法__index在元表.

一个用于索引像obj [123],例如,

__index = function (self, k) return self._data+(k-self._lower)

另一种用法是定义命名方法,如教程中所给出的,

__index = { area = function(a) return a.x*a.x + a.y*a.y end? },

然后我们可以进行函数调用obj:area().

我可以同时做两件事,例如直接索引和命名方法吗?

lua ffi luajit

5
推荐指数
1
解决办法
78
查看次数

标签 统计

lua ×10

luajit ×10

ffi ×4

c++ ×3

c ×2

embedding ×1

lua-api ×1

luabridge ×1

luarocks ×1

sandbox ×1

security ×1