Cocos2d-x V2.x版本对64bit的支持

2015年2月1日后新提交的应用必须要支持64位架构。
我所使用的是cocos2d-x V2.0版本,而且源码有部分代码是修改过的。好在cocos2d-x官方已经放出了一个支持64位的2.2.6版本,可以做为参考。
在修改之前,有必要了解一下32位与64位的一些区别,网上能搜索到的资料有很多,这里简单列一下(尽量通过图表的方式)
I代表int、L代码Long、P代表Pointer

通过上图,大家很容易就发现主要的不同点在long与pointer上
参考资料:
20 issues of porting C++ code on the 64-bit platform
-------------------- 华丽的分隔线 --------------------
还有一些准备工作需要做,升级Mac OS,然后安装XCode 6.x,只有6.x才支持IOS8.x,然后设置build的选项。

然后command + b进行build,如果报错,查看报错的信息然后使用cocos2d-x 2.2.6版本里面的代码与当前使用的代码进行对比,修改完成之后再次build
第三方库:libcurl记得替代,如果你还使用了其它的库,记得也一并替换掉。
在编译的过程中遇到的绝大部分的问题都能通过搜索获得到答案 :)
上面这个过程相对而言比较简单,对于自已写的代码,如果有函数需要获得指针的信息,把 int 改为 long 即可 (原理可参见本文的第一张图)
我遇到的主要问题是
Undefined symbols for architecture arm64:
"CocosDenshion::SimpleAudioEngine::preloadEffect(char const*)", referenced from:
凡是调用了CocosDenshion里方法的代码都会显示有问题,我就奇怪了,CocosDenshion我检查过编译的各项参数,也检查过当前编译项目的Library Search Path,确认所有的都没有问题,清理、重新编译,闹腾了好久还是没解决,直到第二天猛然看到这段错误上面一段提示,有一个路径,我用shell查了一下,发现了问题:

该目录下面居然有一个.a文件,不知道怎么操作的,也就是说它优先使用了这里的库(32位),导致无论我怎么编译和操作,新生成的静态库(libCocosDenshion.a)都是没有用到的,删除、编译,一切都OK了,太坑了,花了一天半的时间>_<
下面引用一段关于Undefined symbols for architecture 的说明(网上能搜索到关于它的问题不是armv7(s)就是使用cocos2d-x V3.x的处理方案,关于cocos2d-x的几乎是没有,好忧伤~ ~)
如果在源代码中,找不到一个标识符的声明,无论是变量名、类名或是方法名,则在编译时会得到“Use of undeclared identifier 'XXXX'”错误,而如果编译器找到了它的声明,而却不知道它怎么实现的,看不到实现代码或者说目标文件里没有这个实现,则会出现链接错误。
错误分类:
1) 引入了需要用到的库的头文件,却没有链接正确的实现库。因为Xcode本身所支持的库是Static Library,即.a方式,.a文件里只有实现。使用的时候需要另外引入头文件,那么就有可能把头文件放进来,没有放.a或放了错误的版本。
2) Build Settings或者Build Phases配置有误。检查Build Phases里的Link Binary With Libraries和Build Settings里的几项Search Path。
3) 从外部导入的文件没有加入到特定的target中。.a、.m、.framework等引入到工程中,却没有勾选当前Build的target,会出现这个问题,可以选中特定的文件,在右侧边栏中选中target。
4) 未包含处理器架构指令集的问题。报错时的提示一般都是“Undefined symbols for architecture armv7/arm64”之类的,而“for architecture armv7/arm64”就是说没有支持armv7,在build settings里architecture相关的几项需要配置正确。
引用自:http://www.molotang.com/articles/1593.html
原文:http://stackoverflow.com/questions/6429494/undefined-symbols-for-architecture-armv7
参考:
I was able to build the cocos2d-x 2.2 in arm64 (Xcode 6.1) #9322
64-bit and iOS 8 Requirements for New Apps
XCode升级到5.1.1(5B1008)导致编译出问题的解决方案
error when creating an archive of my cocos2d app
xcode升级6.0.1之后Undefined symbols for architecture arm64
Cocos2d-x V2.x版本对64bit的支持的更多相关文章
- 微信快速开发框架(六)-- 微信快速开发框架(WXPP QuickFramework)V2.0版本上线--源码已更新至github
4月28日,已增加多媒体上传及下载API,对应MediaUploadRequest和MediaGetRequest ------------------------------------------ ...
- RDIFramework.NET V2.9版本多语言的实现
RDIFramework.NET V2.9版本多语言的实现 现在是国际化时代,软件也不能落后.一个公司里很可能会有老外,也可能有台湾的朋友,他们用软件的习惯都不一样,若同样一个软件同时能适应多种语言文 ...
- RDIFramework.NET V2.9版本 WinFom部分新增与修正的功能
RDIFramework.NET V2.9版本 WinFom部分新增与修正的功能 转眼间RDIFramework.NET框架走了快6个年头了,随着一个版本一个版本的升级改造,现在已经越来越完美了.使 ...
- RDIFramework.NET ━ .NET快速信息化系统开发框架钜献 V2.9 版本震撼发布
RDIFramework.NET ━ .NET快速信息化系统开发框架钜献 V2.9 版本震撼发布 全新体验.全新感觉.2015钜献! 继上个版本“RDIFramework.NET V2.8版本发布”5 ...
- RDIFramework.NET ━ .NET快速信息化系统开发框架 V2.8 版本发布
(新年巨献) RDIFramework.NET ━ .NET快速信息化系统开发框架 V2.8 版本发布 历时数月,RDIFramework.NET V2.8版本发布了,感谢大家的支持. RDIFram ...
- RDIFramework.NET V2.8版本 ━ 开发实例之产品管理(WinForm)
RDIFramework.NET V2.8版本 ━ 开发实例之产品管理(WinForm) 现在,我们使用.NET快速开发整合框架(RDIFramework.NET)来开发一个应用,此应用皆在说明如何使 ...
- RDIFramework.NET ━ .NET快速信息化系统开发框架 V2.8 版本━新增企业通(内部简易聊天工具)
RDIFramework.NET ━ .NET快速信息化系统开发框架 V2.8 版本 新增企业通(内部简易聊天工具) RDIFramework.NET,基于.NET的快速信息化系统开发.整合框架,给用 ...
- RDIFramework.NET ━ .NET快速信息化系统开发框架 V2.8 版本━新增岗位管理-WinForm部分
RDIFramework.NET ━ .NET快速信息化系统开发框架 V2.8 版本 新增岗位管理-WinForm部分 岗位(职位)管理模块主要是针对组织机构的岗位(职位)进行管理,包括:增加.修改. ...
- RDIFramework.NET ━ .NET快速信息化系统开发框架 V2.7 版本发布
历时数月,RDIFramework.NET V2.7 版本发布了,感谢大家的支持. RDIFramework.NET,基于.NET的快速信息化系统开发.整合框架,为企业或个人在.NET环境下快速开发系 ...
随机推荐
- Oracle学习笔记:with as子查询用法
With as短语,也叫做子查询部分(subquery factoring),可以定义一个SQL片断,该SQL片断会被整个SQL语句用到.该语句会在真正的查询之前预先构造一个临时表,之后可以多次使用做 ...
- vuex 的使用
用于多组件共享状态,如果不打算开发大型单页应用,使用 Vuex 可能是繁琐冗余的.确实是如此——如果应用够简单,您最好不要使用 Vuex.可使用简单Bus总线的方式来管理共享的数据详见(http:// ...
- 解决Only a type can be imported. * resolves to a package
HTTP Status 500 - Unable to compile class for JSP: type Exception report message Unable to compile c ...
- 【转载】Java是传值还是传引用
1. 简单类型是按值传递的 Java 方法的参数是简单类型的时候,是按值传递的 (pass by value).这一点我们可以通过一个简单的例子来说明: /* 例 1 */ /** * @(#) Te ...
- Angular 2.0--1
Angular 2.0 从0到1 (五) 第一节:Angular 2.0 从0到1 (一)第二节:Angular 2.0 从0到1 (二)第三节:Angular 2.0 从0到1 (三)第四节:Ang ...
- 洛谷P3964 [TJOI2013]松鼠聚会 [二分答案,前缀和,切比雪夫距离]
题目传送门 松鼠聚会 题目描述 草原上住着一群小松鼠,每个小松鼠都有一个家.时间长了,大家觉得应该聚一聚.但是草原非常大,松鼠们都很头疼应该在谁家聚会才最合理. 每个小松鼠的家可以用一个点x,y表示, ...
- jQuery-Selectors(选择器)的使用(二、层次篇)(转载)
原文:http://www.cnblogs.com/bynet/archive/2009/12/01/1614405.html 本系列文章导航 jQuery-Selectors(选择器)的使用(一.基 ...
- Hive项目开发环境搭建(Eclipse\MyEclipse + Maven)
写在前面的话 可详细参考,一定得去看 HBase 开发环境搭建(Eclipse\MyEclipse + Maven) Zookeeper项目开发环境搭建(Eclipse\MyEclipse + Mav ...
- jqplot利用ajax传值画图表(利用jsp连接数据库)
实现从数据库中取得数据,再把数据传给画jqplot的jsp界面!jsp界面再进行画图,画出我们所需的图表! 有两个jsp界面,7-12.jsp用来连接数据库,并把数据传给ajaxauto.jsp,aj ...
- 统计Mongo数组中相同对象的属性之和
统计Mongo数组中相同对象的属性之和 需求 需要统计app端用户的行为,按天分表,存入mongo.每次用户进行操作的时候,将数据存入app本地,下次用户启动的时候,提交存入mongo,删除app本地 ...