用Android NDK r6編譯boost 1.47

來源:互聯網
上載者:User

轉載請註明出處為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

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.