quick-cocos2d-x平台Lua源码打包后运行出错的一种情况
quick-cocos2d-x平台Lua源码打包后运行出错的一种情况
SunLightJuly 发表于4年前
quick-cocos2d-x平台Lua源码打包后运行出错的一种情况
  • 发表于 4年前
  • 阅读 1658
  • 收藏 6
  • 点赞 0
  • 评论 5

腾讯云实验室 1小时搭建人工智能应用,让技术更容易入门 免费体验 >>>   

摘要: quick-cocos2d-x平台Lua源码打包后由于文件大小写问题造成的运行出错

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的相关代码可以看到,在查询预载入的模块名时是区分大小写的。

共有 人打赏支持
粉丝 60
博文 15
码字总数 12480
评论 (5)
grath
不要告诉我win下不区分大小写 我一直都认为所有平台都是区分的
SunLightJuly

引用来自“职业旅行家”的评论

不要告诉我win下不区分大小写 我一直都认为所有平台都是区分的

你可以自己试一下0
qq626928256
七月大大,是不是在quick3.3之后,原来的加密办法不可以了?我的脚本和资源加密都不可以成功跑起来...
SunLightJuly

引用来自“qq626928256”的评论

七月大大,是不是在quick3.3之后,原来的加密办法不可以了?我的脚本和资源加密都不可以成功跑起来...
脚本没问题啊。资源解密的代码要修改一下,这部分修改在quick 3.3的github分支上是有的,但是在发布版本之后进行的修改,所以使用安装版的quick 3.3不包括这一部分。
qq626928256

引用来自“qq626928256”的评论

七月大大,是不是在quick3.3之后,原来的加密办法不可以了?我的脚本和资源加密都不可以成功跑起来...

引用来自“SunLightJuly”的评论

脚本没问题啊。资源解密的代码要修改一下,这部分修改在quick 3.3的github分支上是有的,但是在发布版本之后进行的修改,所以使用安装版的quick 3.3不包括这一部分。
了解了,可能是因为C++代码没有编译的问题,谢谢七月大大
×
SunLightJuly
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: