一個lua問題解決過程
我在執行一個lua檔案的時候,遇到以下報錯資訊
D:\polycube-solver-master>\a\timer \lua514\lua5.1 polycube-solver.lua problems/soma-cube.txt >soma-res-jit2.txt \lua514\lua5.1: .\bitmatrix.lua:4: module 'bit' not found: no field package.preload['bit'] no file '.\bit.lua' no file 'D:\lua514\lua\bit.lua' no file 'D:\lua514\lua\bit\init.lua' no file 'D:\lua514\bit.lua' no file 'D:\lua514\bit\init.lua' no file '.\bit.dll' no file '.\bit51.dll' no file 'D:\lua514\bit.dll' no file 'D:\lua514\bit51.dll' no file 'D:\lua514\clibs\bit.dll' no file 'D:\lua514\clibs\bit51.dll' no file 'D:\lua514\loadall.dll' no file 'D:\lua514\clibs\loadall.dll' stack traceback: [C]: in function 'require' .\bitmatrix.lua:4: in main chunk [C]: in function 'require' polycube-solver.lua:4: in main chunk [C]: ?
而相同的檔案,使用作者提供的包中的luajit和自己編譯的LuaJIT-2.1.0-beta2可執行檔案是沒有問題的。
D:\polycube-solver-master>\a\timer lua-win\luajit polycube-solver.lua problems/soma-cube.txt >soma-res-jit2.txt D:\polycube-solver-master>\a\timer D:\LuaJIT-2.1.0-beta2\src\luajit polycube-solver.lua problems/soma-cube.txt >soma-res-jit.txt
查閱網上資訊得知,lua自己沒有內建位運算,需要使用擴充套件庫,才能在lua原始檔中require "bit"。從http://bitop.luajit.org/下載的LuaBitOp-1.0.2.zip,但這是個原始碼,不能直接執行。 按照裡面文件的提示,把這個壓縮包中的檔案釋放到lua原始碼所在目錄,然後執行msvcbuild.bat
D:\lua5.1\src>msvcbuild D:\lua5.1\src>cl /nologo /MD /O2 /W3 /c -I .. bit.c bit.c D:\lua5.1\src>link /nologo /DLL /export:luaopen_bit /out:bit.dll bit.obj ..\lua51.lib LINK : fatal error LNK1181: cannot open input file '..\lua51.lib' D:\lua5.1\src>if exist bit.dll.manifest mt /nologo -manifest bit.dll.manifest -outputresource:bit.dll;2 D:\lua5.1\src>del *.obj *.exp *.manifest
提示缺少lib檔案,把下載的lua5.1.lib檔案改名為lua51.lib後放到src的上級目錄,重新執行msvcbuild.bat,編譯完成。
D:\lua5.1\src>msvcbuild D:\lua5.1\src>cl /nologo /MD /O2 /W3 /c -I .. bit.c bit.c D:\lua5.1\src>link /nologo /DLL /export:luaopen_bit /out:bit.dll bit.obj ..\lua51.lib Creating library bit.lib and object bit.exp D:\lua5.1\src>if exist bit.dll.manifest mt /nologo -manifest bit.dll.manifest -outputresource:bit.dll;2 D:\lua5.1\src>del *.obj *.exp *.manifest
從https://sourceforge.net/projects/luabinaries/下載相應的原始碼、可執行檔案和庫檔案。 我用的檔案分別是:
lua-5.1.4_Win32_dll11_lib.zip(這是編譯dll檔案用的) lua-5.1.4_Win32_vc11_lib.zip(這是編譯exe檔案用的,不能用於本文) lua5_1_4_Win32_bin.zip lua5_1_4_Sources.zip
最後,把編譯出來的bit.dll放置到lua5.1.exe檔案所在目錄。上述lua檔案就能順利執行了。
D:\polycube-solver-master>\lua514\lua5.1 polycube-solver.lua problems\toy3.txt Polycube Solver 1.0 Box dimensions: 3x3x1 Pieces: 1_ 3L V_ Locked: V_ (1) Problem matrix: 26x12 。。。 D:\polycube-solver-master>\a\timer \lua514\lua5.1 polycube-solver.lua problems/soma-cube.txt >soma-res-nojit.txt
事後發現,編譯bit.dll不需要完整lua原始碼,只要有lua-5.1.4_Win32_dll11_lib.zip中的檔案就夠了,如下所示
D:\lua_dll>set include=%include%;D:\lua_dll\include D:\lua_dll>msvcbuild D:\lua_dll>cl /nologo /MD /O2 /W3 /c -I .. bit.c bit.c D:\lua_dll>link /nologo /DLL /export:luaopen_bit /out:bit.dll bit.obj ..\lua51.lib Creating library bit.lib and object bit.exp D:\lua_dll>if exist bit.dll.manifest mt /nologo -manifest bit.dll.manifest -outputresource:bit.dll;2 D:\lua_dll>del *.obj *.exp *.manifest
自己太不仔細,原來D:\polycube-solver-master\lua-win目錄下就有一個bit.dll,所以,你懂的。 而LuaJIT的原始碼中已經包含了lib_bit.c。
相關文章
- 遊戲,一個有樂趣的、解決問題的過程遊戲
- 記一次 Composer 問題的解決過程!!
- 一次線上問題的排查解決過程
- munium學習過程中問題解決
- 一個 ExpressionChangedAfterItHasBeenCheckedError 錯誤的解決過程ExpressError
- 記錄開發過程一個路由問題路由
- 運維必備-解決鎖問題的全過程運維
- 記錄一個前端bug的解決過程前端
- 覆盤 PHP 經典面試問題解決過程:上臺階問題PHP面試
- kodbox讀取alist檔案失敗,問題解決過程
- 快取過程存在的三大問題及解決方案快取
- 4 個問題圖解瀏覽器垃圾回收的過程。圖解瀏覽器
- 解決github中一個新手著名問題Github
- Docker殺掉了容器?問題分析與解決過程全面覆盤Docker
- [貝聊科技]一個頁面阻塞問題的排查過程
- 記一次記憶體溢位問題的排查、分析過程及解決思路記憶體溢位
- workerman開發過程中遇到的一些常見的問題與解決方法
- 記一次SQLServer2019安裝和解除安裝問題的解決過程SQLServer
- Android開發過程中遇到的問題以及解決辦法 how toAndroid
- 死鎖問題排查過程-間隙鎖的復現以及解決
- SQL Server 2016升級遷移過程中效能問題解決案例SQLServer
- 解決Java執行過程中拋簽名異常的問題Java
- 8Manage輕鬆解決採購過程“髒亂差”問題
- 記錄一個 gitlab 登入問題解決Gitlab
- 一個案例,教你巧用DMAIC解決“大問題”!AI
- 使用lua+redis解決發多張券的併發問題Redis
- 記一次OOM問題排查過程OOM
- Deployer 使用過程的一些問題
- 記一次專案中解決 -- 併發減庫存超賣問題過程(Java)Java
- Composer 使用過程中遇到的問題和解決方案
- oracle 11.2.0.4 DataGuard Broker配置過程中可能遇到的問題及解決方法Oracle
- 一個關於JS解決陣列相乘問題JS陣列
- OkHttp框架的一個Http500問題解決HTTP框架
- Redis+Lua解決高併發場景搶購秒殺問題Redis
- 分享一個 JSON 相關小需求的解決過程與思路JSON
- 測試平臺-記一次不成功的 RF 遠端庫問題解決過程
- 記一次expdp匯出任務中某張大表報錯問題的解決過程
- 教育直播平臺開發過程中,這些技術問題需要解決
- 通過Observable解決搜尋框問題