Cocos2d-x/Cocos2d-js编译64位so库中遇到的问题
来源:互联网 发布:cad可以画网络拓扑图吗 编辑:程序博客网 时间:2024/05/17 02:23
这几天公司项目使用到了Cocos2d-js,需要打包生成Android的apk包,但是发现生成的apk包在64位8核的手机上会闪退,原因是没有在apk中打包arm64-v8a的so包。于是需要修改Cocos2d-js的make文件来重新编译,经过几番波折,还是没有成功,在这里把中间遇到的问题记录下来,希望对后来者有帮助。
首先,官方教程中有对64位的打包进行了说明,如下:
http://cocos2d-x.org/news/390
根据官方教程中的说明,最麻烦的地方在于需要将Cocos2d-x所用到的所有第三方库都要重新生成64位的so包,因为Cocos2d-x官方只支持32位的版本。
于是开始一个个将第三方库下载到本地,结果下载下来之后发现很多第三方库都没有Android.mk文件,需要自己去编写,瞬间崩溃。后来在找资料的过程中无意中发现Cocos2d-x官方其实提供了所有第三方库的工程,地址如下:
https://github.com/cocos2d/cocos2d-x-3rd-party-libs-src
这个地址中有详细的说明如何将各个第三方库打包成64位,大家按步骤完成即可。在这里我把打包过程中遇到的问题和解决方法给大家分享一下。
其中一个比较麻烦的问题如下,很多库打包的时候都会报错:
autoreconf: running: aclocal -I /Users/zhaoxy/Downloads/cocos2d-x-3rd-party-libs-src-3/contrib/install-android/arm64/share/aclocal --force -I scriptsaclocal: error: aclocal: file '/usr/local/share/aclocal/pkg.m4' does not existautoreconf: aclocal failed with exit status: 1
我在网上查了很久,都没有找到解决方案,最后直接cd到报错的目录,ls了一下,发现pkg.m4这个文件其实是一个替身,源地址是
pkg.m4 -> ../../Cellar/pkg-config/0.28/share/aclocal/pkg.m4
这才发现是源地址中的pkg.m4文件丢失,看路径可以知道,与pkg-config有关,在google上一查,重新安装之后问题就解决了。
brew install pkg-config
第二个问题是编译websocket库的时候报错:
7b7be6ad94d3864d494cefd8561b8008fb992b72fe79de5ac132133cc8e5afd5a7b599df91aa209d322db0d4c8ba953eb5da08b260ee3ffa38f14660eedbd5a0 libwebsockets-1.3-chrome37-firefox30.ziplibwebsockets-1.3-chrome37-firefox30.zip: FAILEDshasum: WARNING: 1 computed checksum did NOT matchmake: *** [.sum-websockets] Error 1
这个问题一看就知道是下载文件签名不匹配导致的,重新下载了好几遍也没有解决,只有采用猥琐做法,直接修改源码中的签名解决:
f8bb24890370ba2ae368b246bd58dcdc889c251690d43d2cd7f1d3f2a6c4d348d140b9e3bd2b120a181f02c4724ece96a3f184a0f03ea34daf75cdcfe7380c8e libwebsockets-1.3-chrome37-firefox30.zip
最后一个问题,编译完所有第三方库之后,到cocos2d-js工程目录下执行cocos compile -p android -m release命令仍然报错,提示SpiderMonkey中的so缺失,这才发现Cocos2d-js还有一个第三方库。于是去GitHub上继续下载,这个工程可不小,一下200多M。
下载下来之后,由于源码中并没有对Andorid64位进行支持,于是只能自己修改js/src/build-android/build.sh文件,增加64位编译选项:
TOOLS_ARCH=arm-linux-androideabiTARGET_NAME=arm-linux-androideabiCPU_ARCH=armv8-aRELEASE_ARCH_DIR=arm64-v8aGCC_VERSION=4.9TOOLNAME_PREFIX=arm-linux-androideabibuild_with_arch
但是编译的时候报错:
configure: error: /opt/android-ndk-r10e/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-g++ -mandroid -fno-short-enums -fno-exceptions -Wno-psabi -march=armv8-a -I/opt/android-ndk-r10e/sources/cxx-stl/gnu-libstdc++/4.9/include -I/opt/android-ndk-r10e/sources/cxx-stl/gnu-libstdc++/4.9/libs/armeabi/include -I/opt/android-ndk-r10e/sources/cxx-stl/gnu-libstdc++/4.9/include/backward -fno-rtti -mandroid -L/opt/android-ndk-r10e/platforms/android-21/arch-arm/usr/lib -Wl,-rpath-link=/opt/android-ndk-r10e/platforms/android-21/arch-arm/usr/lib --sysroot=/opt/android-ndk-r10e/platforms/android-21/arch-arm -llog -Wl,--allow-shlib-undefined failed to compile and link a simple C++ source.------ config.log ------configure:7564:1: note: in expansion of macro 'CONFIGURE_STATIC_ASSERT'configure: failed program was:#line 7557 "configure"#include "confdefs.h"
这个问题暂时还没有解决,如果有解决了的朋友欢迎和我联系。
如果大家觉得对自己有帮助的话,还希望能帮顶一下,谢谢:)
个人博客:http://blog.csdn.net/zhaoxy2850
本文地址:http://blog.csdn.net/zhaoxy_thu/article/details/47963825
转载请注明出处,谢谢!
- Cocos2d-x/Cocos2d-js编译64位so库中遇到的问题
- 命令行编译cocos2d-x遇到的问题。
- cocos2d-2.x创建项目以及编译SO遇到的问题
- Cocos2d-x使用中遇到的问题
- Cocos2d-x 解决编译时自动删除.so的问题
- cocos2d-x 编译 Anroid版本遇到的问题以及解决办法
- cocos2d-x 编译 Anroid版本遇到的问题以及解决办法
- 编译cocos2d-x for android 项目遇到的问题
- cocos2d-x 编译 Anroid版本遇到的问题以及解决办法
- 初试cocos2d-x,编译运行cocos2d-x范例的过程和遇到的问题。
- cocos2d-x游戏中加入sdk遇到的问题
- Cocos2d-x开发中遇到的问题汇总
- Cocos2d-x项目过程中遇到的一些问题总结
- Cocos2d-x项目过程中遇到的一些问题总结
- 关于vs2012创建cocos2d-x中控件遇到的问题
- cocos2d-x在Cygwin上编译Android用库文件时遇到的Box2D问题
- Cocos2d中遇到的问题
- Android-cocos2d-x配置遇到的问题
- AJAX一些常用操作
- Round A APAC Test 2016 Problem D. gSnake 贪吃蛇 stl应用
- 阅读laravel源代码有感
- 《数据结构与算法分析》图论算法--邻接表与拓扑排序
- FAAC转换PCM为AAC
- Cocos2d-x/Cocos2d-js编译64位so库中遇到的问题
- cocos2d-x实现3D模型的换装系统的研究
- 集合框架相关知识点(二)
- jquery的$.extend和$.fn.extend作用及区别
- 【分享】ボクの手の中の楽園镜像版
- rtmp 推送h264 + aac 的数据
- spring 引用其他bean
- 【R】auto.arima和Arima的联系和参数解释
- 基于id的游戏客户端事件分发(消息队列)