iOS SDK開(kāi)發(fā)時(shí)朝抖,有關(guān)OC和C++混編造成其它類錯(cuò)誤的問(wèn)題(Compile Sources As Objective-C++)

.h :頭文件。頭文件包含類谍珊,類型治宣,函數(shù)和常數(shù)的聲明。
.m :源代碼文件砌滞。這是典型的源代碼文件擴(kuò)展名侮邀,可以包含Objective-C和C代碼。
.mm :源代碼文件贝润。帶有這種擴(kuò)展名的源代碼文件绊茧,除了可以包含Objective-C和C代碼以外還可以包含C++代碼。僅在你的Objective-C代碼中確實(shí)需要使用C++類或者特性的時(shí)候才用這種擴(kuò)展名

當(dāng)你需要在源代碼中包含頭文件的時(shí)候打掘,你可以使用標(biāo)準(zhǔn)的#include編譯選項(xiàng)华畏,但是Objective-C提供了更好的方法鹏秋。#import選項(xiàng)和#include選項(xiàng)完全相同,只是它可以確保相同的文件只會(huì)被包含一次亡笑。Objective-C的例子和文檔都傾向于使用#import侣夷。

最近要幫忙做一個(gè)SDK,主體功能已經(jīng)實(shí)現(xiàn)仑乌,是用C/C++編寫(xiě)的百拓,所以導(dǎo)入這個(gè)SDK庫(kù)到新項(xiàng)目中,程序需要有以下設(shè)置才能不會(huì)報(bào)錯(cuò):

項(xiàng)目-Targets-Build Settings Apple

LLVM 6.0 -Language

-Compile Sources AS

image

C++ Language Dialect 和 C++ Standard Library

image

這么做后晰甚,.a靜態(tài)庫(kù)文件都能編譯通過(guò)衙传,但是問(wèn)題來(lái)了,如果項(xiàng)目中引用到了其它的第三方庫(kù)文件厕九,可能會(huì)產(chǎn)生錯(cuò)誤蓖捶,如下圖所示:

image
image

就是很莫名其妙的就出現(xiàn)了問(wèn)題,經(jīng)過(guò)調(diào)試發(fā)現(xiàn)止剖,原來(lái)是Compile Sources As 設(shè)置為 Object-C++所導(dǎo)致的,也就是說(shuō)編譯器開(kāi)始識(shí)別C++了落君,而ObjectiveC部分參數(shù)識(shí)別不了穿香,所以就各種錯(cuò)誤了。

相信有的朋友在使用百度地圖api的時(shí)候绎速,添加lib庫(kù)也會(huì)遇到類似的問(wèn)題:

image

那么到底該如何解決呢皮获?如果切換回According To File Type,那么lib庫(kù)(SDK庫(kù))就會(huì)報(bào)錯(cuò)纹冤,切換成C++洒宝,部分第三方庫(kù)就會(huì)出差,該怎樣混編兼容呢萌京?接下來(lái)我給出一種方案雁歌,具體如下:

1,Compile Sources As 切換回

According to File Type

知残,這樣能保證其它的第三方庫(kù)靠瞎、以及之后可能添加的不同類型源碼文件都沒(méi)有問(wèn)題,我們以文件類型來(lái)動(dòng)態(tài)編譯(也就是說(shuō)是oc文件求妹,就用oc編譯乏盐,是C++文件,就以C++編譯)

2制恍,在新項(xiàng)目中父能,把

AppDelegate

或是

引用到lib庫(kù)

的那個(gè)文件或是任意一個(gè)文件后綴修改成

.mm

,這樣净神,系統(tǒng)編譯時(shí)就可以識(shí)別到C++了何吝,我們自己的lib庫(kù)也不會(huì)出錯(cuò)了~

【PS:如果AppDelegate中有其它調(diào)用溉委,修改成.mm后綴會(huì)引起錯(cuò)誤,那么就修改其它的文件】

image

3岔霸,此時(shí)在運(yùn)行項(xiàng)目薛躬,是不是都沒(méi)問(wèn)題了?第三方庫(kù)也不會(huì)報(bào)錯(cuò)了(跟Compile Sources As有關(guān))呆细,我們自己的lib庫(kù)型宝、SDK也不會(huì)報(bào)錯(cuò)了~

注意事項(xiàng)

1.靜態(tài)庫(kù)中如果有采用ObjectC++實(shí)現(xiàn),那么需要您保證您工程中至少有一個(gè).mm后綴的源文件(您可以將任意一 個(gè).m后綴的文件改名為.mm)絮爷,或者在工程屬性中指定編譯方式趴酣,即將XCode的Project -> Edit Active Target -> Build Setting-> GCC4.2 - Language -> Compile Sources As設(shè)置為"Objective-C++"

2.如果您只在Xib文件中使用了目標(biāo)lib庫(kù)(比如BMKMapView),沒(méi)有在代碼中使用它(BMKMapView)坑夯,編譯器在鏈接時(shí)不會(huì)鏈接對(duì)應(yīng)符合岖寞,需要在工程屬性中顯式設(shè)定:在XCode的Project -> Edit Active Target -> Build -> Linking ->Other Linker Flags中添加:-ObjC

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市柜蜈,隨后出現(xiàn)的幾起案子仗谆,更是在濱河造成了極大的恐慌,老刑警劉巖淑履,帶你破解...
    沈念sama閱讀 211,265評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件隶垮,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡秘噪,警方通過(guò)查閱死者的電腦和手機(jī)狸吞,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,078評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)指煎,“玉大人蹋偏,你說(shuō)我怎么就攤上這事≈寥溃” “怎么了威始?”我有些...
    開(kāi)封第一講書(shū)人閱讀 156,852評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)像街。 經(jīng)常有香客問(wèn)我字逗,道長(zhǎng),這世上最難降的妖魔是什么宅广? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,408評(píng)論 1 283
  • 正文 為了忘掉前任葫掉,我火速辦了婚禮,結(jié)果婚禮上跟狱,老公的妹妹穿的比我還像新娘俭厚。我一直安慰自己,他們只是感情好驶臊,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,445評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布挪挤。 她就那樣靜靜地躺著叼丑,像睡著了一般。 火紅的嫁衣襯著肌膚如雪扛门。 梳的紋絲不亂的頭發(fā)上鸠信,一...
    開(kāi)封第一講書(shū)人閱讀 49,772評(píng)論 1 290
  • 那天,我揣著相機(jī)與錄音论寨,去河邊找鬼星立。 笑死,一個(gè)胖子當(dāng)著我的面吹牛葬凳,可吹牛的內(nèi)容都是我干的绰垂。 我是一名探鬼主播,決...
    沈念sama閱讀 38,921評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼火焰,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼劲装!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起昌简,我...
    開(kāi)封第一講書(shū)人閱讀 37,688評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤占业,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后纯赎,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體谦疾,經(jīng)...
    沈念sama閱讀 44,130評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,467評(píng)論 2 325
  • 正文 我和宋清朗相戀三年址否,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了餐蔬。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片碎紊。...
    茶點(diǎn)故事閱讀 38,617評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡佑附,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出仗考,到底是詐尸還是另有隱情音同,我是刑警寧澤,帶...
    沈念sama閱讀 34,276評(píng)論 4 329
  • 正文 年R本政府宣布秃嗜,位于F島的核電站权均,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏锅锨。R本人自食惡果不足惜叽赊,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,882評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望必搞。 院中可真熱鬧必指,春花似錦、人聲如沸恕洲。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,740評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至葛家,卻和暖如春户辞,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背癞谒。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,967評(píng)論 1 265
  • 我被黑心中介騙來(lái)泰國(guó)打工底燎, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人扯俱。 一個(gè)月前我還...
    沈念sama閱讀 46,315評(píng)論 2 360
  • 正文 我出身青樓书蚪,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親迅栅。 傳聞我的和親對(duì)象是個(gè)殘疾皇子殊校,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,486評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容