zoukankan      html  css  js  c++  java
  • 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

    参考:

    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

     
  • 相关阅读:
    sql server 操作文件
    sql server T-sql查询执行顺序
    js 时间相关函数
    js页面 :函数名 is not defined
    C# 通过文件路径获取文件名
    WRAR下载及注册
    Java 中xml解析
    string 与 byte[] 互转时的注意事项
    Spring MVC表单标签
    java 中基本类型与字符串之间的互相转换
  • 原文地址:https://www.cnblogs.com/sevenyuan/p/4262530.html
Copyright © 2011-2022 走看看