Cocos2d-x V2.x版本對64bit的支援

來源:互聯網
上載者:User

標籤:style   blog   http   ar   io   os   使用   sp   for   

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

Cocos2d-x V2.x版本對64bit的支援

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.