【iOS-Cocos2d遊戲開發之十二】淺析使用C++/C/OC進行iOS遊戲混編出現“failed with exit”問題與小結;

來源:互聯網
上載者:User

 李華明Himi 原創,轉載務必在明顯處註明:
轉載自【黑米GameDev街區】 原文連結: http://www.himigame.com/iphone-cocos2d/478.html

     大家都知道Xcode中支援C、C++、Object-C3種語言的混編,在上一節Box2d中介紹過cocos2d封裝的box2d是c++源碼實現的,那麼如果想讓編譯器混編,只需要將實作類別的".m"格式修改成".mm"即可,這樣編譯器即可編譯允許c、c++、oc的代碼;

     但是混編代碼,在編譯最容易出現也是最多的錯誤如下:

Command /Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/g++-4.2 failed with exit

部分分析總結如下:

   1.  (全域變數)static方法名重複-因為C語言裡沒有對象的概念,它的方法只要加入相應的.h檔案就可以使用,所以,如果和C++ or Objective-C的靜態方法重名了,那麼環境無法區分,很明顯,這個錯誤是編譯時間候的錯誤,而對於static的變數及方法是在編譯的時候便被加入的,所以無法識別.

  2.  (命名空間)全域變數名重複,理由和上面是一樣的,當然,如果是全域變數,建議在Objective-C的.m檔案(當然現在被改成.mm了)中聲名,不然,聲明在.h中單獨使用是沒有問題的,如果直接引用了C or C++的.h,那麼即使這時候全域變數不重複,也會出現上面的問題.

  3.  (主函數)含有多個main方法,main方法是程式的入口,如果有多個檔案含有main方法,那麼也會出現上面的問題.

    其實對於“failed with exit”的問題,總的來說,這個問題就是因為方法或是全域變數重複所導致的編譯環境無法識別並編譯 !所以童鞋們使用混編程式的時候要特別注意,最好的解決辦法就是,如果你的項目後期有1/100000 的幾率會使用混編進行(例如加入box2d開發包),那麼就應該從項目一開始就將實作類別修改成".mm"格式進行編譯代碼,防止後期複雜的各種混編問題;

       OK,這篇小結就到這裡;

聯繫我們

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