我正在尝试将LuaJIT嵌入到C应用程序中。代码是这样的:

#include <lua.h>
#include <lualib.h>
#include <lauxlib.h>
#include <stdlib.h>
#include <stdio.h>

int barfunc(int foo)
{
    /* a dummy function to test with FFI */
    return foo + 1;
}

int
main(void)
{
    int status, result;
    lua_State *L;
    L = luaL_newstate();

    luaL_openlibs(L);

    /* Load the file containing the script we are going to run */
    status = luaL_loadfile(L, "hello.lua");
    if (status) {
        fprintf(stderr, "Couldn't load file: %s\n", lua_tostring(L, -1));
        exit(1);
    }

    /* Ask Lua to run our little script */
    result = lua_pcall(L, 0, LUA_MULTRET, 0);
    if (result) {
        fprintf(stderr, "Failed to run script: %s\n", lua_tostring(L, -1));
        exit(1);
    }

    lua_close(L);   /* Cya, Lua */

    return 0;
}

Lua代码是这样的:
-- Test FFI
local ffi = require("ffi")
ffi.cdef[[
int barfunc(int foo);
]]
local barreturn = ffi.C.barfunc(253)
io.write(barreturn)
io.write('\n')

它报告这样的错误:
Failed to run script: hello.lua:6: cannot resolve symbol 'barfunc'.

我四处搜索,发现ffi模块上的文档很少。非常感谢。

最佳答案

ffi库要求使用luajit,因此必须使用luajit运行lua代码。
从文档中:
“FFI库已紧密集成到LuaJIT中(它不能作为单独的模块使用)”。

如何嵌入luajit?
在“嵌入LuaJIT”下查看http://luajit.org/install.html

在mingw下,如果我添加,您的示例运行

__declspec(dllexport) int barfunc(int foo)

在barfunc函数上。

在Windows下,luajit被链接为dll。

关于c - 嵌入时如何使用LuaJIT的ffi模块?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5919743/

10-09 05:16