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

來源:互聯網
上載者:User

 

用C,C++,Objective-C三種C語言3C混編的開發程式,在當然方法也和大家說一下吧,就是在Xcode環境中把C語言的.c檔案,C++的.cpp檔案與Objective-C的.m檔案的檔案名稱全部修改成.mm,這樣就可以啟用Objective-C++的編譯環境3C混編了,可是遇到了上述問題,網上的說法不一致,而且我也遇到了多次這個問題,最後解決的方式也不一樣,所以最後把所有可能的情況總結了一下:

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

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

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

    總的來說,這個問題是因為方法或是全域變數重複所導致的編譯環境無法識別並編譯 

以上轉自一位大牛:http://blog.sina.com.cn/s/blog_67e8ece00100me2u.html

以下是我個人對用於ios下linux c靜態庫幾點建議:

    通常我們都會把函數的聲明和全域變數定義在.h檔案中,以方便引用,但在ios靜態庫中,我個人覺得在ios中引用的c靜態庫標頭檔中最少量的聲明庫內部的函數(可將函數寫在.c檔案中或者單獨做一份.h檔案,將除了介面以外的函數放在一起),這樣就儘可能少的產生函數名衝突,全域變數衝突的問題.

經驗之談,血的教訓,以上問題搞了兩天沒編譯過去,悲催!

 

在附加一個 關於"undefine symbols for architecture i386"問題的解決方案

http://blog.csdn.net/steve1018/article/details/6902973

 

最主要可能的原因是你把庫編譯的架構整錯了,注意armv6,armv7,i368的區別,以及靜態庫的目的,適用於真機還是用於模擬器,因為他們聲稱的檔案是不一樣內容的(分別存放在不同的產生路徑,要注意哦!)

聯繫我們

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