luajit在windows mingw64

时间:2017-06-06 12:06:03

标签: c lua luajit

所以我有一个项目,我需要lzma解压缩所以我用Google搜索并找到了这个项目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 但是,当我执行dumpbin时,luaopen_lzma函数就在那里,所以它似乎已经导出了。我在这里彻底难倒。我对二进制库等没有太多经验,所以这让我很烦恼。我希望能够编译和使用这个库,而不必编写自己的库。有谁知道我做错了什么?

1 个答案:

答案 0 :(得分:0)

我解决了我的问题,最初我编译并忘记链接llzma.c所以它没有任何lua api代码,我把它放在它的文件夹中的二进制文件旁边但它没有&#39 ;看到dll并没有加载它,所以我把它放在工作目录中,它似乎工作。从那时起,我把它放在工作目录中,并将旧的文件夹保留在bin文件夹中,从那时起,它似乎在bin文件夹中找到了dll并从该文件夹加载。所以当我从bin文件夹中删除它时它起作用了......
所以这对我来说是完全失败和疏忽,对不起大家过去常常帮我解决问题的时候,这只是表明我对这些东西的经验是多么缺乏。