轉載請注明出處:
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比較復雜的東西,比如有函數之類的,貌似就出問題了(此處不太確定)。