轉載請註明出處為KlayGE遊戲引擎
在PC上的C++開發中,boost已經很普遍。但對於Android這樣的移動平台呢?由於KlayGE正在移植Android,作為依賴庫之一的boost也必須移植過去。官方的boost並沒有提供Android支援,看來得自己做了。
受MysticTreeGames的Boost-for-Android啟發,我想用最新的Crystax NDK來編譯boost 1.47。
準備工作
需要下載
- boost 1.47
- Crystax’s NDK r6
- MysticTreeGames的Boost-for-Android
補丁
首先,MysticTreeGames的補丁是基於boost 1.45和官方的NDK r5,在最新版上不一定能完美運作。因為有些源檔案在1.45到1.47的過程中更改了,無法自動打上補丁。所以我手工地在原始的boost 1.47上根據補丁進行修改。其實不太難,因為只有12個檔案需要修改。
編譯指令碼
MysticTreeGames提供的build-android.sh也沒法直接用,很可能是因為它並沒有在Cygwin上測試過。於是我寫了一 個build_android.sh和一個build_android.bat作為編譯指令碼。幸運的是,最終的指令碼很簡單,而且在Windows、 Cygwin和Linux下都能用。(還有個額外的好處,用build_android.bat的話就不再需要Cygwin了!)
到這裡,boost 1.47已經可以用NDK r6正常編譯了。但有個缺點是只能產生靜態庫(”link=static runtime-link=static”)。
還能用VC編譯嗎?
接著我試用VC10來編譯boost,結果出問題了。由於user-config.jam被打了補丁,現在它只能支援NDK的編譯器。解決方案是把 修改過的user-config.jam拷到boost的根目錄,重新命名為別的名字,比如user-config-android.jam。然後就可以用 “bjam –user-config=./user-config-android.jam …”來告訴bjam用哪個.jam來作為user config。
合在一起
在附件裡面你可以找到所有我修改過的檔案。在編譯之前,你必須設定一個環境變數,名字為“ANDROID_NDK”,只想你的NDK根目錄。
boost_for_android_patch.7z