cocos2d-x 3.11 安卓编译失败

之前从3.4一直用到3.6.1,ndk用r10c,一直没有任何问题

升级到3.11之后,利用cocos compile -p android -m release进行打包,
报错:error: relocation overflow in R_ARM_THM_CALL
ndk:r10c、r10e均失败

有帖子说在Android.mk下加入一句什么=:arm即可,但-js跟-x引擎合并之后,已经没有js-bindings目录了,所以感觉并不是这个问题

跟我用gen-libs生成预编译库一样的错误。

官方都说没问题, 3.10生成Android预编译库没问题,同样的方式3.11却报错,而且报错也不是个例。所谓的LOCAL_ARM_MODE := arm,3.10和3.11本就有这句,js-bindings、lua-bindings目录在cocos2d-x-3.11\cocos\scripting下

看了一下,jni目录里的Android.mk确实本身有这句,但cocos\scripting目录里没有Android.mk文件,倒是上一层目录cocos里有一个Android.mk,但这个文件里面也已经有了LOCAL_ARM_MODE := arm,昨晚在某个地方发现了没有这句的我自己给添上了,但并不能解决编译报错的问题……所以我觉得现在这个问题不一定跟LOCAL_ARM_MODE := arm有关

编译 C++ Lua 还是 JS ?

javascript(回帖非要6个字= =)

可以给我一个示例工程嘛?

额……因为我是直接用以前的旧工程(用3.11的命令行创建js工程,然后把旧工程的res、src、project.json、main.js拷过去覆盖)遇到的这个问题,没有单独开过一个所谓实例工程,所以没法提供

这个问题的核心原因是 Android 编译过程中,部分使用 thumb 模式,部分使用 arm 模式,relocation overflow 应该是由于 thumb 模式是 16 位,链接地址不足导致的错误。

可以把编译过程的 log 打出来,找一下其中使用 thumb 模式的模块,修改为 arm 模式

一开始我用的是ndk r10c,然后报错的目录名中含有“3d”,后来我仅仅只是更换了ndk为r10e之后报错的目录名又变了(并且找不到之前带有3d的那些名字)

把编译的完整 log 发一下吧,我看看

好的,不过现在没法传,我晚上下班回家用两个版本的ndk再编一次。

@panda 还请帮忙顺便看看这个问题,一样的错误提示:
http://forum.cocos.com/t/cocos2d-x3-11/36518

应该是这个问题了,不过3.10都没有这个问题,3.11突然就出现了,这感觉不太好。

主要是这个问题不仅和编译配置有关系,还和系统环境有关,有些机器可以重现有些不行,我们测试机器刚好都没有出现这个问题,还以为没问题,可能是哪个模块忘记添加 LOCAL_ARM_MODE 标签

结合您白天说的跟楼上那位朋友的方法,我给cocos\editor-support\cocostudio里面的Android.mk加上arm之后编译成功了,谢谢你们(手动@GameArt)

谢谢,我也会修改一下引擎中的

3.11.1发布了,我本以为修改了,结果下下来苦哈哈的让电脑编译了差不多一个多小时,得到的结果和之前一样,不知道为什么,感觉心里似乎突然有点失落,哎。。。也许是我期望太高了

官网下载页面里,3.11.1的更新内容本来就只有一条“支持ipv6”嘛……别太伤心,都被坑习惯了

editor support 部分中相关的 android.mk 在 v3.11.1 已经修改了,@yixiaoqingyuz 如果你那边还有错误,可能是其他地方引起的,还麻烦把完整的编译 log 发出来