Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C luajit在windows mingw64上编译lua lzma_C_Lua_Luajit - Fatal编程技术网

C luajit在windows mingw64上编译lua lzma

C luajit在windows mingw64上编译lua lzma,c,lua,luajit,C,Lua,Luajit,所以我有一个需要lzma解压的项目,所以我在谷歌上找到了这个项目 经过一番探索,我成功地编译了它,发现它是为Lua5.2编写的,所以我修改了一些行来修复它。在llzma.c文件中,我更改了luaL_newlib(L,L)行到luaL_寄存器(L,“lzma”,L),注释掉了luaL\u检查版本(L),并更改了大小\u t len=lua\u rawlen(L,1)至尺寸长度=lua\u objlen(L,1)等 我的makefile看起来像这样 all: lzma.dll lzma.dll:

所以我有一个需要lzma解压的项目,所以我在谷歌上找到了这个项目
经过一番探索,我成功地编译了它,发现它是为Lua5.2编写的,所以我修改了一些行来修复它。在llzma.c文件中,我更改了
luaL_newlib(L,L)行到
luaL_寄存器(L,“lzma”,L),注释掉了
luaL\u检查版本(L),并更改了
大小\u t len=lua\u rawlen(L,1)
尺寸长度=lua\u objlen(L,1)
我的makefile看起来像这样

all: lzma.dll

lzma.dll: LzFind.o LzAlloc.o LzmaDec.o LzmaEnc.o LzmaLib.o llzma.o
    gcc -O -shared -o lzma.dll llzma.o LzmaLib.o LzmaEnc.o LzmaDec.o 
LzFind.o LzAlloc.o -L"..\bin" -llua51

LzFind.o: LzFind.c
    gcc -O2 -c LzFind.c 
LzAlloc.o: LzAlloc.c
    gcc -O2 -c LzAlloc.c 
LzmaDec.o: LzmaDec.c
        gcc -O2 -c LzmaDec.c 
LzmaEnc.o: LzmaEnc.c
    gcc -O2 -c LzmaEnc.c 
LzmaLib.o: LzmaLib.c    
    gcc -O2 -c LzmaLib.c 
llzma.o:   llzma.c
    gcc -I..\luajit\src\src -O2 -c -o llzma.o llzma.c
我将其编译,但当我尝试通过require加载它时,我得到以下消息:

> require 'lzma'
error loading module 'lzma' from file '.\lzma.dll':
    The specified procedure could not be found.

stack traceback:
    [C]: at 0x66dd6c40
    [C]: in function 'require'
    stdin:1: in main chunk
    [C]: at 0x00401f80
我又搜索了一下,发现了这个

然而,当我做dumpbin时,luaopen_lzma函数就在那里,所以它似乎已经被导出了。我在这里完全被难住了。我对二进制库之类的东西没有太多经验,所以这让我很烦恼。我希望能够编译和使用这个库,而不必编写自己的库。有人知道我做错了什么吗?

我解决了我的问题,最初我编译并忘了链接llzma.c,所以它没有任何lua api代码,我把它放在二进制文件旁边的文件夹中,但它没有看到dll,也没有加载它,所以我把它放在工作目录中,它似乎工作正常。从那时起,我把它放在工作目录中,把旧的放在bin文件夹中,从那时起,它似乎在bin文件夹中找到了dll,并从该文件夹加载。因此,当我从bin文件夹中删除它时,它工作了…

这完全是我的失误和疏忽,很抱歉大家都来帮我解决问题,这表明我在这方面是多么的缺乏经验。

你能上传你所做编辑的库吗?你尝试过lua-l线程的其他建议吗?将
llzma.c
中的luaopen函数签名更改为
LUALIB_API intluaopen_lzma(lua_State*L)
,看看是否有效。我确实尝试了LUALIB_API,就像我在另一个项目的源代码中看到的那样,但它也不起作用。这是我的两个更改过的文件,LuaJIT是用与您构建lzma模块相同的mingw编译器构建的吗?我相信是的。至少它是按原样分发的。作为旁注,我去编译了一个不同的项目,它运行得很好。此页中的base64库