专栏首页游戏杂谈Cocos2d-x V2.x版本对64bit的支持

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

2015年2月1日后新提交的应用必须要支持64位架构。

我所使用的是cocos2d-x V2.0版本,而且源码有部分代码是修改过的。好在cocos2d-x官方已经放出了一个支持64位的2.2.6版本,可以做为参考。

iOS 64-bit support for v2.x>>

zip包下载>>

在修改之前,有必要了解一下32位与64位的一些区别,网上能搜索到的资料有很多,这里简单列一下(尽量通过图表的方式)

I代表int、L代码Long、P代表Pointer

通过上图,大家很容易就发现主要的不同点在long与pointer上

参考资料:

32位程序与64位程序区别

将 Linux 应用程序移植到 64 位系统上

64位编程的33条军规

linux GCC 64位编程技巧

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)导致编译出问题的解决方案

修改cocos2d-2.0-x-2.0.3支持c++11

error when creating an archive of my cocos2d app

xcode升级6.0.1之后Undefined symbols for architecture arm64

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 利用threshold实现的遮罩引导

    点击“开始引导”,则进入引导操作。除指定的按钮可以操作外,其它区域均不可点击。这种应用当新功能或是新产品上线后,用来引导用户来使用产品/功能,是十分有用的。fa...

    meteoric
  • LuaJit转义的问题

    之前在项目中,处理类似!30转为表现的字符串时,有人写了这样的一段代码“\![1-2][0-9]”,当换成luajit时启动报错了,出错原因在于转义字符使用不对...

    meteoric
  • 对Unity的Resources目录进行改名

    项目用的是Unity5.5版本,开发的时候将相关的图集、预制对象资源都放在 Resources 目录下,而真机使用的是 StreamingAssets 目录下的...

    meteoric
  • 通过 LLVM IR 看语言特性(1)

    本系列文章会展示一些系列源码到 LLVM IR 语言的转换。目标是让我们更好的理解编译器是怎么运作的。

    酷酷的哀殿
  • Python爬虫之微博评论爬取

    專 欄 ❈ 罗罗攀,Python中文社区专栏作者 专栏地址: http://www.jianshu.com/u/9104ebf5e177 ❈ 提交Cooki...

    Python中文社区
  • python图像处理-字符画风格图片

    本系列课程是针对无基础的,争取用简单明了的语言来讲解,学习前需要具备基本的电脑操作能力,准备一个已安装python环境的电脑。如果觉得好可以分享转发,有问题的地...

    用户7054460
  • [译] 科技初创企业遭遇IPO寒冬

    大数据文摘
  • 4399AT界面版使用说明(二)

    勾选该选项,表示目标应用的安装配置全部由本地的安装配置来执行,不从服务端获取设备信息;控制台信息如下:

    厦门-安仔
  • 脚本错误量极致优化:监控上报与 Script error

    在前端开发工作中,除了项目开发保质保量上线以外,项目的数据监控也应该配套起来,确保线上的正常运转。如上报 pv 监控项目是否正常运转;测速上报反应项目质量;脚本...

    郭林烁
  • WampServer 给电脑搭建apache服务器和php环境

      前端不仅要做页面展示层,还负责着数据交互的部分,不要等到后端人员做好工作了前端才开始对接,那样太被动了。

    书童小二

扫码关注云+社区

领取腾讯云代金券