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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章