Cocos2d-x/Cocos2d-js编译64位so库中遇到的问题

这几天公司项目使用到了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 scripts
aclocal: error: aclocal: file ‘/usr/local/share/aclocal/pkg.m4‘ does not exist
autoreconf: 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.zip
libwebsockets-1.3-chrome37-firefox30.zip: FAILED
shasum: WARNING: 1 computed checksum did NOT match
make: *** [.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-androideabi
TARGET_NAME=arm-linux-androideabi
CPU_ARCH=armv8-a
RELEASE_ARCH_DIR=arm64-v8a
GCC_VERSION=4.9
TOOLNAME_PREFIX=arm-linux-androideabi
build_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
转载请注明出处,谢谢!

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-30 08:33:14

Cocos2d-x/Cocos2d-js编译64位so库中遇到的问题的相关文章

Windows 7 编译64位boost库

1. 官网下载boost 2. 解压boost到D:\Library\boost_1_64_0 3. 打开 VS2015 x64 本机工具命令提示符,输入 "d:" 回车,再输入 "cd D:\Library\boost_1_64_0",进入boost目录 4. 输入 bootstrap.bat,回车,生成x64版的bjam.exe和b2.exe 5. 输入 "b2.exe  --build-type=complete --stagedir=".

Window下编译 64位ffmpeg 引入libx264 libmp3lame库

好记性不如烂笔头,每次编译总要有些时间折腾,记录下编译过程,方便后来者. 本文 介绍windows下编译64位Ffmpeg库 (版本V4.02)如何引入libx264及libmp3lame(编码mp3)库. 编译环境选择MinGW64.MinGW64如何安装可参考前面的文章https://www.cnblogs.com/wanggang123/p/9896564.html 一.. 编译x264库,如需要ffmpeg支持h264编码编译时需要将它添加进来.编译x264库相对容易,一次搞定. 首先下

使用VS2010编译64的Geos库

Geos库在cmake中总是报错,所以我决定试试nmake编译64位的库.现将编译过程记录如下: 1.下载Geos,我下的是最新版3.5.0,地址在 http://trac.osgeo.org/geos/ 2.打开源代码文件夹中的nmake.opt文件,将以下内容进行更改,保存. ############################################################################### # Set WIN64=YES if you are bu

本地编译64位hadoop并进行部署。

我是接着用上次已经部署好的环境,故已经有ssh以及java.没有安装这两个的朋友可以看本人关于伪分布式安装的博文. 首先是输入命令sudo apt-get install g++ autoconf automake libtool make cmake zlib1g-dev pkg-config libssl-dev,安装完这些准备工具后,下载protobuf-2.5.0.tar.gz,解压到主目录下,输入./configure,make & make install 这三个命令进行安装,安装成

VS2012编译64位程序

安装64位操作系统不是编译64位程序的必要条件,关键是要装64位程序的编译器. 1. 选择“Build” – “Configuration Manager”菜单,打开配置管理器.点击新建解决方案平台. 2. 选择“x64”平台,点击确定按钮. 3. 这时候配置管理器中的平台已经改成刚才选择的x64了,这时候编译出来的就是64位程序了.可以在工具栏的平台下拉框中快速切换目标平台. 注意:一个工程调用的另一个工程的DLL时,位数必须一致,即本工程要编译为64位,DLL也必须编译为64位.如果本工程要

Delta3d 编译64位 注意事项 记录

编译64位的Delta3d 需要手动编译其所有依赖的库,具体到Delta3d官网查询,或者直接下载打包好的依赖库源代码进行编译 1. CEGUI 的 渲染OpenGL中的 glew.c 用 其依赖库中的glew.c 代替. 2. 编译CEGUI的依赖库PCE用静态库,因为在CEGUI中的预定义宏中定义了PCRE_STATIC 3. 编译OSG中的 PNG .JPEJ .TIff 用官网下载下来的库(依赖库)(静态库) 4. 编译STAGE中  为了支持xerces,把语言中支持w_char 选择

VS2013编译64位boost

为了编译CGAL库,必须要先编译boost,在编译64位库时遇到了一些问题,主要解决办法是: 1. 选择VS2013安装目录下的"x64兼容命令提示"命令行对话框: 2. 切换到boost代码目录,例如 CD D:\boost_1_56_0\: 3. 输入:bootstrap.bat 命令,源代码文件夹中会新增了2个文件b2.exe和 bjam.exe: 4. 输入命令: bjam stage --prefix="D:\Boost\bin" --with-syste

编译64位boost

最近一直在Window下编译64位的boost,找到这篇博文,好好学习一下: 一直以来都是在Win32环境下Build和使用boost,但现在基本上每天都在64位Win7下工作,所以很有必要把这几天的经验总结下来.和32位环境不同,x64环境下编译得先从开始菜单启动Visual Studio的Visual Studio 2008 x64 Win64 Command Prompt进入命令提示符,而不是随便打开任意一个命令行窗口就行.然后转到boost根文件夹,运行bootstrap.bat生成x6

Ubuntu14下Hadoop开发<2> 编译64位Hadoop2.4

Hadoop官方网站只提供了32位的Hadoop包,我装的是64位的系统,自然无法使用,会报错误,导致的结果是无法启动hadoop libhadoop.so.1.0.0 which might have disabled stack guard. 我们可以在${Hadoop-Home}/lib/native文件夹下找到libhadoop.so.1.0.0文件,会出现如下 [email protected]:$ file /usr/mytools/hadoop-2.4.0/lib/native/l