luajit Компиляция lua-lzma на windows mingw64

Так что у меня есть проект, где мне нужна распаковка 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); и т.п.
Мой make-файл выглядит примерно так

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 '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, так что, похоже, она была экспортирована. Я полностью озадачен здесь. У меня нет большого опыта работы с бинарными библиотеками и тому подобным, так что меня это беспокоит. Я хотел бы иметь возможность компилировать и использовать эту библиотеку и не должен писать свою собственную. Кто-нибудь знает, что я делаю не так?

1 ответ

Я решил свою проблему, сначала я скомпилировал и забыл связать llzma.c, чтобы он не имел никакого кода lua api, я поместил его рядом с двоичным файлом в его папке, но он не увидел dll и не загрузил его, поэтому я положил его в рабочий каталог, и он, кажется, работает. с тех пор я положил его в рабочий каталог и оставил старый в папке bin, и с тех пор кажется, что он нашел dll в папке bin и загружал из него. Поэтому, когда я удалил его из папки bin, это сработало...
Так что это был полный провал и недосмотр с моей стороны, извините за то, что все раньше помогали мне с моими проблемами, это просто показывает, насколько я неопытен, когда дело доходит до этого.

Другие вопросы по тегам