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环境下快速开发系 ...
随机推荐
- 【转】卖萌的大牛你桑不起啊 ——记CVPR2011一篇极品文章
来源:http://blog.renren.com/share/228707015/7197269922 作者 : 庞宇 CVPR2011正在如火如荼的进行中,在网上能看到的部分文章中,我终于找到一篇 ...
- 【LOJ】#2071. 「JSOI2016」最佳团体
题解 01分数规划,二分加树背包-- 代码 #include <bits/stdc++.h> #define enter putchar('\n') #define space putch ...
- 【struts2基础】配置详解
一.struts2工作原理(网友总结,千遍一律) 1 客户端初始化一个指向Servlet容器(例如Tomcat)的请求2 这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做Action ...
- Python3.7.2,在Linux上跑来跑去的,是在升级打怪么?
Python3.7.2,在Linux上跑来跑去的,是在升级打怪么? 前不久,发布了Python在Windows(程序员:Python学不学?完全没必要纠结)和Mac OS(我是Python,P派第 ...
- Javascript的字符串(String)操作学习
1.bold() 方法用于把字符串显示为粗体.语法: stringObject.bold() 如下,对str进行bold操作之后,实际上时对这个字符串加了<b>标签,在文档中将以粗体进行展 ...
- Atcoder Tenka1 Programmer Contest 2019 题解
link 题面真简洁 qaq C Stones 最终一定是连续一段 . 加上连续一段 # .直接枚举断点记录前缀和统计即可. #include<bits/stdc++.h> #define ...
- NOIP练习赛题目4
肥得更高 难度级别:C: 运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 自2009年以来,A.B站的历史就已经步入了农业变革的黎明期.在两站的 ...
- 关于ListView中EditText在软键盘弹出后的焦点问题
转自:http://www.cnblogs.com/haofei/p/3305030.html 在ListView中,每次弹出软键盘后就会重新调用getView()方法,导致EditText失去焦点. ...
- java基础记录(一):开发环境的配置
一.JDK的安装与环境变量配置 1.jdk下载与安装. jdk1.8.0_192下载地址 下载完成后,双击运行安装文件.可以选择你要安装的位置或者直接下一步,等待安装完成,最后关闭. 2.配置环境变量 ...
- Asyncio中Lock部分的翻译
Asyncio中Lock部分的翻译 Locks class asyncio.Lock(*, loop=None) 原始锁的对象. 这个基础的锁是一个同步化的组件,当它上锁的时候就不属于典型的协程了(译 ...