【问题标题】:luajit Compiling lua-lzma on windows mingw64luajit 在 windows mingw64 上编译 lua-lzma
【发布时间】:2017-11-07 10:41:01
【问题描述】:

所以我有一个需要 lzma 解压的项目,所以我用谷歌搜索并找到了这个项目https://github.com/rainfiel/lua-lzma
经过一番摸索,我设法编译它,发现它是为 lua 5.2 编写的,所以我更改了一些行来解决这个问题。在 llzma.c 文件中,我将luaL_newlib(L, l); 行更改为luaL_register(L, "lzma", l);,注释掉luaL_checkversion(L);,并将size_t len = lua_rawlen(L, 1); 更改为size_t len = lua_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

我做了更多搜索,发现了这个http://lua-users.org/lists/lua-l/2013-03/msg00363.html
然而,当我做垃圾箱时,luaopen_lzma 函数就在那里,所以它似乎已经被导出了。我在这里完全被难住了。我对二进制库等没有太多经验,所以这让我很困扰。我希望能够编译和使用这个库,而不必自己编写。有谁知道我做错了什么?

【问题讨论】:

  • 你能上传你所做的编辑的图书馆吗?
  • 你在那个 lua-l 线程上尝试过其他建议吗?将llzma.c中的luaopen函数签名改成LUALIB_API int luaopen_lzma(lua_State* L)看看是否可行。
  • 我确实尝试了 LUALIB_API,因为我在另一个项目的源代码中看到了它,但它也不起作用。这是我的两个更改文件pastebin.com/ZKZCqqJdpastebin.com/NiRJAprY
  • LuaJIT 是否使用与构建 lzma 模块相同的 mingw 编译器构建?
  • 我相信是的。至少它是按原样分发的。作为旁注,我去编译了一个不同的项目,它工作得很好。 webserver2.tecgraf.puc-rio.br/~lhf/ftp/lua 此页面中的 base64 库

标签: c lua luajit


【解决方案1】:

我解决了我的问题,最初我编译并忘记链接 llzma.c 所以它没有任何 lua api 代码,我把它放在它的文件夹中的二进制文件旁边,但它没有看到 dll 并且没有t 加载它,所以我把它放在工作目录中,它似乎工作。从那时起,我将它放在工作目录中,并将旧的放在 bin 文件夹中,从那时起,它似乎在 bin 文件夹中找到了 dll 并从那个文件夹中加载。因此,当我从 bin 文件夹中删除它时,它起作用了...
所以这完全是我的失败和疏忽,很抱歉每个人曾经帮助我解决我的问题,这只是表明我在这方面是多么缺乏经验。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-15
    • 1970-01-01
    • 1970-01-01
    • 2013-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多