簡體   English   中英

luajit在windows mingw64上編譯lua-lzma

[英]luajit Compiling lua-lzma on windows mingw64

所以我有一個項目,我需要lzma解壓縮所以我用Google搜索並找到了這個項目https://github.com/rainfiel/lua-lzma
經過一番探索,我設法編譯它,發現它是為lua 5.2編寫的,所以我改了一些行來解決這個問題。 在llzma.c文件中,我更改了luaL_newlib(L, l); line to luaL_register(L, "lzma", l); ,注釋掉了luaL_checkversion(L); ,並更改了size_t len = lua_rawlen(L, 1); to 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 '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函數就在那里,所以它似乎已經導出了。 我在這里徹底難倒。 我對二進制庫等沒有太多經驗,所以這讓我很煩惱。 我希望能夠編譯和使用這個庫,而不必編寫自己的庫。 有誰知道我做錯了什么?

我解決了我的問題,最初我編譯並忘記鏈接llzma.c所以它沒有任何lua api代碼,我把它放在它的文件夾中的二進制文件旁邊,但它沒有看到dll並且沒有加載它,所以我把它放在工作目錄中,它似乎工作。 從那時起,我把它放在工作目錄中,並將舊的文件夾保留在bin文件夾中,從那時起,它似乎在bin文件夾中找到了dll並從該文件夾加載。 所以,當我從bin文件夾中刪除它時,它工作...
所以這對我來說是徹底的失敗和疏忽,對不起大家過去常常幫我解決問題的時候,這只是說明了我對這些東西的無經驗。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM