(原)lua提示cannot load incompatible bytecode


轉載請注明出處:

http://www.cnblogs.com/darkknightzh/p/5754872.html

前段時間用終端和zerobrane運行torch的lua程序。zerobrane主要用於調試(雖說功能簡單,但是還算可以用吧)。終端直接使用th xx.lua(torch安裝的是luajit),zerobrane直接點擊兩個右箭頭的“Execute the current project”。某天運行程序時,突然提示:

File.lua:301: Failed to load function from bytecode: (binary): cannot load incompatible bytecode
[C]: in function 'error'
    ...program/torch/install/share/lua/5.1/torch/File.lua:301: in function 'readObject'
    ...program/torch/install/share/lua/5.1/torch/File.lua:369: in function 'readObject'
    ...program/torch/install/share/lua/5.1/torch/File.lua:353: in function 'readObject'
    ...program/torch/install/share/lua/5.1/torch/File.lua:409: in function 'load'

程序崩潰的地方是調用‘dofile’,在其內部出錯的地方是load函數(之前有save成.t7文件,判斷該文件存在,則直接load,否則重新生成該文件)。

當時很奇怪。后來發現:

1. 如果使用zerobrane運行程序進行save操作,再使用zerobrane運行程序,進行load操作,則不會崩潰。

2. 如果刪除該.t7文件,使用終端運行該程序,save成t7文件,再使用終端運行程序,此時load該t7文件,也不會出錯。

3. 如果使用zerobrane進行save,再使用終端load文件,或者使用終端save,再使用zerobrane進行load,則程序都會在load處崩潰。

個人猜測,原因應該是終端使用th命令和zerobrane直接運行文件所使用的解釋器(interpreter)不同導致的。但是更改了一下,暫時沒有成功。。。額,以后再說吧。。。

目前解決方法就是:單一使用zerobrane或者終端的th來運行程序。不要交替的使用。

ps:

1. 終端中運行th,信息如下:

運行lua,信息如下:

運行luajit,信息如下:

2. 后來測試過,如果save比較簡單的數據,使用另一種方式load的話,能成功載入數據;如果save比較復雜的東西,比如有函數之類的,貌似就出問題了(此處不太確定)。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM