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

前端之家收集整理的这篇文章主要介绍了Cocos2d-x V2.x版本对64bit的支持前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

原文链接:http://www.cnblogs.com/meteoric_cry/p/4171535.html

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

猜你在找的Cocos2d-x相关文章