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

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也一样是被优化了,没有最后链接入游戏的动态库了。

阅读更多
个人分类: cocos2d-x
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭