http://makedreamvsogre.blogspot.tw/2014/01/ios-dependenciesogre-source.htmlhtml
可能有人會想問我為什麼要自行編譯IOS Dependencies,主要是因為Ogre提供PreBuild的版本是用C++11編譯,當使用到一些ThirdParty Library沒辦法使用C++11編譯的時候或沒有Source Code的ThirdParty Library,這就很重要了(比方Particle Universe 1.6),在此跟你們分享一下相關心得,但願能達拋磚引玉的效果…
ios
- 安裝hg
- 安裝cmake
- hg clone http://bitbucket.org/sinbad/ogre/ -u v1-9
- hg clone https://bitbucket.org/cabalistic/ogredeps 到Oger的Source folder根路徑
- $(HOME)(例:/Users/akilar)底下,創建.bash_profile檔案,並填入export PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/applications/CMake2.8-8.app/contents/bin:$PATH,最後一個為Camke的路徑,要看你是什麼版本,前面為預設系統路徑,必定填好,否則可能會發生ls命令找不到的問題,這個動做主要是讓command line視窗能夠找到camke的指令。
- 使用cmake ide介面創建ogredeps專案,在ogredeps下指定Build Folder(也就是where to build the binaries = ...($HOME)/Ogre_src_v1-9-0/ogredeps/Build,並執行Configure
- 之後將Cmake選項裡的CMAKE_OSX_SYSROOT裡參數,指定到iPhoneOS.platform/Developer/SDKs/iPhoneOS7.0.sdk,再按一次Configure(這個動做的目的,是讓他產生IOS專案,而不是MAC專案)
- 之後再按Generate便可產生專案
- 為了創建Arm64的zip lib,須要在gzguts.h裡加入如下的定義,否則編不過(因為檔案IO在arm64下再也不定義於#include )
//on 64, base io functions are in
#ifndef _WINDOWS
#include
#endif
- 接下來把OIS裡的Cocoa及Mac開頭的檔案,移除Reference(這個動做是指移除掉mac reference code的部份),並加入iphone的相關code,注意,Add的時候不要選錯Target。
- 再來是將全部的Target專案設定改為:
a.Architectures:
1.Architectures設成Standard architectures ( include 64-bti)(armv7, armv7s, arm64):這個意思
是包含32bit及64bit的設定,產生全部的architectures libs,這樣才行發佈到全部的
devices.
2.Build Ative Architecture Only不要設成Yes,這樣沒辦法生成全部的lib
b.Build Options
1.Compiler for C/C++/Objective-C設成Default compiler (Apple LLVM 5.0),xcode 5.0之後就
只有這個能夠用,舊專案轉換過來的時候,能夠會設成不存在的compiler的設定,要
記得來改
c.Deployment
1.IOS Deployment Target設到6.0以上,沒辦法再低,因為這樣沒辦法創建 arm64的執行
檔
d.Apple LLVM 5.0 - Language
1.C Language Dialect設成GNU99[-std=gnu99],由於Partice Universe目前沒辦法使用C++11
編譯,之後的C++專案又沒辦法指定C++11,這裡統一使用GNU,記得全部相關專
案設定成統一便可
e.Apple LLVM 5.0 - Language - C++
1.C++ Language Dialect設成GNU++98[-std=gnu++98]由於Partice Universe目前沒辦法使用
C++11編譯,之後的C++專案又沒辦法指定C++11,這裡統一使用GNU,記得全部相
關專案設定成統一便可
2.C++ Standard Library設成libstdc++(GNU C++ standard library)由於Partice Universe目前沒
辦法使用C++11編譯,之後的C++專案又沒辦法指定C++11,這裡統一使用GNU,記
得全部相關專案設定成統一便可
PS:
1.之後全部專案設定都遵守上述方式指定,我稱之為基礎專案設定
2.Compiler Default所表明的值沒辦法確認,因為舊專案在新的Xcode開啟後,會自動改
成Comipler Default或沒辦法確認的值,所以最好自行手動指定好,不要信任Compiler
Default.
- 接下來就能夠把相關的專案給Build起來。
- 由於OGRE只認iOSDependencies這個Folder,因此須要把相關產生的Lib copy到對應的Folder,還有他lib的Folder也只認Debug及Release,因此須要用到Merage Lib的技巧來處理,(也就是將i386及arm架構合在一塊兒),可使用lipo -create src/ois/Debug-iphoneos/libOIS.a src/ois/Debug-iphonesimulator/libOIS.a -output ./../../iOSDependencies/lib/Debug/libOIS.a來合成檔案,當然對應的head檔也要copy過去,至於路徑關係則要參考Ogre提供的prebuild dependencies的檔案,上述相關的工做,筆者是使用批次檔處理流程作完,mac批次檔處理又是令一則故事,這這裡不討論。
- 在Ogre的Sourcde Folder建Build Folder,並切換到commnad line視窗,在Build Folder下
cmake -D OGRE_BUILD_PLATFORM_APPLE_IOS=1 -G Xcode Ogre的SourceFolder路徑
(比方/Users/akilar/ogre_src_v1-9-0),可能有人會問我為什麼不用IDE介面,因為目前此版本用IDE建不出專案,相關細節能夠在Ogre討論區爬文。
- 專案建好以後,依基礎專案設定將全部的Target都設好,之後就能夠把SimpleBrowser創建起,算是大功告成了。
- 至於本身的程式參考到其餘的Dependency Ogre的ThirdParty Lib,也須要依基礎專案設定將全部的Target都設好編出相關的lib.
- 本身的程式要考到的Other Linker Flags,請參考Ogre專案的SimpleBrowser的設定,當然也要注意Search Paths裡的Head Search Paths及Library Search Paths。