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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM