(原)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比较复杂的东西,比如有函数之类的,貌似就出问题了(此处不太确定)。
posted on 2016-08-09 22:36 darkknightzh 阅读(6519) 评论(0) 编辑 收藏 举报