使用NDK r10構建Cocosd-x v3.2時編譯和連結錯誤的解決辦法

來源:互聯網
上載者:User

標籤:android   http   color   io   os   使用   ar   java   strong   

如果你使用NDK r10構建Cocos2d-x v3.2,將會遇到所有測試案例編譯錯誤以及Lua測試案例連結錯誤。

 

1. 編譯錯誤

錯誤資訊是:

12345678 /Users/minggo/SourceCode/cocos2d-x/build/../cocos/./3d/CCBundleReader.cpp:94:23: error:   return type of out-of-line definition of ‘cocos2d::BundleReader::tell‘  differs from that in the declarationssize_t BundleReader::tell()  ^/Users/minggo/SourceCode/cocos2d-x/build/../cocos/./3d/CCBundleReader.h:90:14: note:   previous declaration is herelong int tell();

編譯錯誤在這裡修複,對此我們很抱歉。

 

2. 連結錯誤

修複編譯錯誤之後,當你建立Lua測試案例或者新的Lua工程時,你將遇到連結錯誤。

 

我已經在Android問題反饋系統中提交這個錯誤。NDK開發人員承認這是NDK r10的一個bug。以下提供兩種解決辦法:

1)使用命令列"-nodefaultlibs -lstdc++ -latomic -ldl -lm -lc -lcompiler_rt_static"將組建檔案改為libgcc.a。

但是,因為我們使用獨立的工具鏈,所以改變組建檔案對Cocos2d-x是行不通的。

2)使用libc++_shared.so,然後在Application.mk中添加LIBCXX_USE_GABIXX:=true,強制使用gabi++重建libc++。

 

這個方法需要使用共用庫,還需要修改Cocos2dxActivity.java來載入依賴的共用庫。我們不希望做這樣的修改,因為:

* 我們沒有測試過共用庫,所以我們也沒有使用過共用庫 

* 使用共用庫將比使用靜態庫產生的.apk大0.13M 

* Google開發人員將在下一代NDK中修複這一問題

 

總結

我們建議您使用NDK r9d,不使用NDK r10。如果你使用NDK r10,如下步驟可以幫你解決上述兩個問題: 

1)聲明BundleReader::tell()時,將long int改為ssize_t。查看更多詳細資料請查看這個pr。

2)將APP_STL:=c++_static改為APP_STL:=c++_shared。在Application.mk中添加LIBCXX_USE_GABIXX:=true, 然後修改你的Java啟用代碼來載入libc++_shared.so。 查看更多詳細資料請查看這個pr。

 

來源網址:http://cocos2d-x.org/news/307

使用NDK r10構建Cocosd-x v3.2時編譯和連結錯誤的解決辦法

聯繫我們

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