oc和c 混編引起的錯誤

2021-07-23 16:28:25 字數 1528 閱讀 3362

最近要幫忙做乙個sdk,主體功能已經實現,是用c/c++編寫的,所以匯入這個sdk庫到新專案中,程式需要有以下設定才能不會報錯:

c++ language dialect 和 c++ standard library

這麼做後,.a靜態庫檔案都能編譯通過,但是問題來了,如果專案中引用到了其它的第三方庫檔案,可能會產生錯誤,如下圖所示:

就是很莫名其妙的就出現了問題,經過除錯發現,原來是compile sources as 設定為 object-c++所導致的,也就是說編譯器開始識別c++了,而objectivec部分引數識別不了,所以就各種錯誤了。

那麼到底該如何解決呢?如果切換回according to file type,那麼lib庫(sdk庫)就會報錯,切換成c++,部分第三方庫就會出差,該怎樣混編相容呢?接下來我給出一種方案,具體如下:

1,compile sources as切換回according to file type,這樣能保證其它的第三方庫、以及之後可能新增的不同型別原始碼檔案都沒有問題,我們以檔案型別來動態編譯(也就是說是oc檔案,就用oc編譯,是c++檔案,就以c++編譯)

3,此時在執行專案,是不是都沒問題了?第三方庫也不會報錯了(跟compile sources as有關),我們自己的lib庫、sdk也不會報錯了~

注意事項

1.靜態庫中如果有採用objectc++實現,那麼需要您保證您工程中至少有乙個.mm字尾的原始檔(您可以將任意一 個.m字尾的檔案改名為.mm),或者在工程屬性中指定編譯方式,即將xcode的project -> edit active target -> build setting-> gcc4.2 - language -> compile sources as設定為"objective-c++"

2.如果您只在xib檔案中使用了目標lib庫(比如bmkmapview),沒有在**中使用它(bmkmapview),編譯器在鏈結時不會鏈結對應符合,需要在工程屬性中顯式設定:在xcode的project -> edit active target -> build -> linking ->other linker flags中新增:-objc

OC和Swift混編 驚喜

今天在和一位前輩交流的之後,使用了oc和swift混編開發,遇到了乙個讓我忍不住要歡呼的情況,在這裡,跟大家分享一下,也再次讚嘆一下xcode的強大.oc和swift混編出現最多的就是在編寫swift 的過程中使用oc框架了.以前,在xcode6.3beta版本的時候,我猶記得我們在進行oc和swi...

關於swift和OC混編

啦啦 最近沒啥事情做就開始幹swift了,然後就 混編的各種問題接肘而來,1.如何在swift中使用oc 但是如果手抖點錯的話,那麼就只能自己手動建立了,1.1 建立乙個.h檔案 名字隨便取 1.2 然後在project build setting 搜尋bridge 1.3 將建立的.h路勁填充進去...

Swift與OC的混編

自2014年蘋果推出了swift之後,確實很快就受到許多開發者的歡迎但在實際開發時,可能有許多第三方庫並未實現 swift化,這時就需要swift與oc的混編技巧 1.在.件中引用swift的類和方法,需要在.件中進行引用,需要注意引用格式 import yourprojectname swift....