尝试通过Android上的要求访问资产中的LUA脚本



我最近尝试过移植我一直在努力使用Android的引擎,并在尝试使用LUA脚本中的"需要"或" Dofile"时遇到了一些问题。<<<<<<<<<<

(快速注意:这是在C 11中写的,使用NDK-Build和Ant在Windows 7上编译(

编译LUA(版本5.3(非常简单,我使用以下文章来访问内部资产目录:50 Plaster Blog文章有关加载压缩Android资产

我在替换的fopen函数中添加了一个输出,以帮助调试此问题以及我运行时:

luaL_dofile(LuaS, "scripts/test.lua");

我得到:

>> scripts/test.lua , read

这对我来说是完美的,并在资产/脚本文件夹中运行文件,但是当我尝试在LUA脚本中运行以下行时:

local derp = require("scripts.noop")

我得到:

>> /usr/local/lib/lua/5.3/scripts/noop.so , read

浏览了LUA源代码后,此路径似乎是" luaconf.h"中定义的" lua_cdir",这也解释了为什么它寻找 *.so files而不是 *.lua ...'我不确定为什么要寻找lua_cpath而不是lua_path或如何解决此问题。

如果有人可以将我指向正确的方向,那将很棒,如果我可以通过覆盖LUA源外的搜索路径/设置来做到这一点,那就更好了。

对不起,如果这个问题写得不好,如果需要进一步的信息,我将提供。我现在有点匆忙。

感谢您的阅读。

需要检查LUA_PATHLUA_CPATH,并在package.pathpackage.cpath中发现了许多不同的组合。环境变量LUA_PATH和LUA_CPATH实际上可以合并到包装中,随着准备工作。

psuedo-c/c - 示例:

lua_getglobal(L, "package");
lua_getfield(L, -1, "path");
lua_getfield(L, -2, "cpath");
const char* cpath = lua_tostring(L, -1);
const char* path = lua_tostring(L, -2);
lua_pop(L, 3); // field 2, field 1, package table
printf("cpath: `%s`n", cpath);
printf("path: `%s`n", path);

几乎等同于减去打印调用:

>print(package.cpath)
.?.dll;C:Program FilesLuaConsolebin?.dll;C:Program FilesLuaConsolebinloadall.dll
>print(package.path)
.?.lua;C:Program FilesLuaConsolebinlua?.lua;C:Program FilesLuaConsolebinlua?init.lua;

这是需要工作的示例:

>require("abc")
 (Runtime) | Stack Top: 0 | [string "require("abc")"]:1: module 'abc' not found:
        no field package.preload['abc']
        no file '.abc.lua'
        no file 'C:Program FilesLuaConsolebinluaabc.lua'
        no file 'C:Program FilesLuaConsolebinluaabcinit.lua'
        no file '.abc.dll'
        no file 'C:Program FilesLuaConsolebinabc.dll'
        no file 'C:Program FilesLuaConsolebinloadall.dll'
 --
stack traceback:
        [C]: in function 'require'
        [string "require("abc")"]:1: in main chunk
        [C]: at 0x00401c80

问题的解决方案是让您的资产目录落入package.cpathpackage.path中的目录中。正如@gabesechan在评论中建议的那样:"如果您将文件从资产复制到实际文件系统。它。"因此,如果您能够得到这个位置,请努力!

相关内容

  • 没有找到相关文章

最新更新