quick-cocos2d-x平台Lua源码打包后运行出错的一种情况

安稳与你 提交于 2019-12-02 04:20:19

quick-cocos2d-x平台的Lua源码打包及加密功能是其提供的方便功能之一(具体可参考lonewolf的这篇文章)。今天Quick-x群里的一位朋友在使用时遇到了点问题,经过我们的探讨找到了原因。虽然是个小问题,不过还是顺手记录一下,以便今后自己和大家查询。

这位朋友在app/scenes/MyScene.lua文件里使用了以下语句调用另一个模块:

local SocketTCP = require("app.Utitls.SocketTCP")

所调用的模块文件SocketTcp.lua放在app/Utitls目录下,在player下面直接调试脚本文件时运行一切正常。但将Lua脚本文件打包后,运行时就出现错误提示:

LUA ERROR: [string "app.scenes.MyScene"]:0: module 'app.Utitls.SocketTCP' not found:
no field package.preload['app.Utitls.SocketTCP']
no file '.\app\Utitls\SocketTCP.lua'
no file 'G:\stuffs\tsett\proj.win32\aa\lua\app\Utitls\SocketTCP.lua'
......(后面还有一大堆路径查找提示)

开始怀疑是运行时没有加载上源码包,或者是源码打的包有问题,但调试发现所有打包的文件在preload阶段都是已经正确载入了的。

进一步调试,确认错误就出在上述require语句。仔细检查,发现文件名里是“Tcp”,而代码里引用的是“TCP”,是不是大小写的原因呢?修改代码如下,重新打包运行果然正常了:

local SocketTCP = require("app.Utitls.SocketTcp")

回过头看,查出的原因虽然有点出乎意料,但却在情理之中。因为没打包之前,载入的是Lua文件,文件名在Windows平台下是不区分大小写的。而打包之后,模块在压缩包里变成了app.Utitls.SocketTcp这种形式,查看preload的相关代码可以看到,在查询预载入的模块名时是区分大小写的。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!