cocos2d-x安卓中Java_org_cocos2dx_lib_Cocos2dxRenderer.cpp等jni中文件被优化

本文解决了一个Cocos2dx项目中JNI调用失败的问题,详细介绍了定位问题的过程,包括检查目标文件的存在性、尝试不同方法来确定是否被正确链接以及如何避免被优化器移除。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

cocos2d-x游戏新项目中搭android的在jni调用是出现以下问题:

1.Cocos2dxRenderer中的 调用jni接口Cocos2dxRenderer.nativeOnResume()时挂了,提示的错误是:Cocos2dxRenderer_nativeOnResume  UnsatisfiedLinkError

第一步,看看Java_org_cocos2dx_lib_Cocos2dxRenderer.cpp是否被编译成目标文件.o,在libarmeabi.a中是可以很清晰地看到这个Java_org_cocos2dx_lib_Cocos2dxRenderer.o。因此这个是存在的。

第二步,已知这个文件中另外一个jni调用的本地方法nativeInit,但这个方法在main.cpp中被定义;在代码中是能被正常调用的;把这个定义的方法挪到文件Java_org_cocos2dx_lib_Cocos2dxRenderer.cpp中,代码调用时也是挂了。

第三步,有可能这个文件没有被链接如动态库中,但是这个.o文件确实在libarmeabi.a中,在最后被连接入游戏的动态库中。

第四步,基于以上的试验结果,有可能是这个目标文件.o最后被优化,并没有被链接入游戏的动态库中。试验可以在Java_org_cocos2dx_lib_Cocos2dxRenderer.cpp定义一个函数,注意这个方法不在extern“C”中,然后为不被优化掉,因此在main.cpp调用这个函数,这样应该就不会被优化。代码一跑,终于好了。。。

第五步,jni中还有文件TouchesJni.cpp也一样是被优化了,没有最后链接入游戏的动态库了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值