加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

使用NDK r10构建Cocosd-x v3.2时编译和链接错误的解决办法

发布时间:2020-12-14 19:12:45 所属栏目:百科 来源:网络整理
导读:如果你使用NDK r10构建Cocos2d-x v3.2,将会遇到所有测试用例编译错误以及Lua测试用例链接错误。 1. 编译错误 错误信息是: /Users/minggo/SourceCode/cocos2d-x/build/../cocos/./3d/CCBundleReader.cpp:94:23: error: return type of out-of-line definitio

如果你使用NDK r10构建Cocos2d-x v3.2,将会遇到所有测试用例编译错误以及Lua测试用例链接错误。


1. 编译错误

错误信息是:

/Users/minggo/SourceCode/cocos2d-x/build/../cocos/./3d/CCBundleReader.cpp:94:23: error: 
  return type of out-of-line definition of 'cocos2d::BundleReader::tell'
  differs from that in the declaration
ssize_t BundleReader::tell()
  ^
/Users/minggo/SourceCode/cocos2d-x/build/../cocos/./3d/CCBundleReader.h:90:14: note: 
  previous declaration is here
long int tell();

编译错误在这里修复,对此我们很抱歉。

2. 链接错误

修复编译错误之后,当你创建Lua测试用例或者新的Lua工程时,你将遇到链接错误。

我已经在Android问题反馈系统中提交这个错误。NDK开发人员承认这是NDK r10的一个bug。以下提供两种解决办法:

1)使用命令行"-nodefaultlibs -lstdc++ -latomic -ldl -lm -lc -lcompiler_rt_static"将生成文件改为libgcc.a。

但是,因为我们使用独立的工具链,所以改变生成文件对Cocos2d-x是行不通的。

2)使用libc++_shared.so,然后在Application.mk中添加LIBCXX_USE_GABIXX:=true,强制使用gabi++重建libc++。

这个方法需要使用共享库,还需要修改Cocos2dxActivity.java来加载依赖的共享库。我们不希望做这样的修改,因为:

* 我们没有测试过共享库,所以我们也没有使用过共享库

* 使用共享库将比使用静态库生成的.apk大0.13M

* Google开发人员将在下一代NDK中修复这一问题

总结

我们建议您使用NDK r9d,不使用NDK r10。如果你使用NDK r10,如下步骤可以帮你解决上述两个问题:

1)声明BundleReader::tell()时,将long int改为ssize_t。查看更多详细信息请查看这个pr。

2)将APP_STL:=c++_static改为APP_STL:=c++_shared。在Application.mk中添加LIBCXX_USE_GABIXX:=true,然后修改你的Java激活代码来加载libc++_shared.so。 查看更多详细信息请查看这个pr。

原网站:http://cn.cocos2d-x.org/tutorial/show?id=1187

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读