簡體   English   中英

使用cpp擴展的Objective-C,我不知道我在做什么

[英]Objective-C with cpp extensions, I don't know what I'm doing

因此,當奇怪的錯誤從XCode中跳出來時,我仍然感覺像是一個新手。 昨天我開始得到這個:

___gxx_personality_v0”,引用自:___ gxx_personality_v0 $ non_lazy_ptr

那是在構建單元測試目標時,該目標使用XSD和iPhoneSDK中的.mm文件。 當我將文件擴展名更改回.m時,錯誤消失了,因為我尚未在其中使用C ++代碼。 (盡管我計划這樣做。)由於我的知識有限,我在Google上搜索並看到其他人指出使用了錯誤的編譯器。 另一個鏈接指向錯誤設置的標志。 憑借更加有限的知識,我決定選擇UnitTest目標中的鏈接器選項。 事實證明,“ 標准C ++庫”類型設置默認情況下設置為“動態” 將此設置更改為static后,我的錯誤消失了,我的測試現在變成綠色條...錯誤...綠色按鈕。 我在這里問是因為我仍然不知道自己在做什么。 顯然,此設置會影響編譯器,但我需要更多詳細信息。 我是不是在為即將到來的另一場災難性死亡做好准備? 如果有的話,這將產生什么負面影響? 為什么我以前沒有遇到問題? 我曾經在單元測試中使用過.mm文件,盡管我相信當時我正在使用GoogleToolsForMac代碼庫進行單元測試,現在我使用本機XCode支持進行單元測試。 有人可以幫我解釋一下嗎?

簡短答案:發生錯誤是因為您使用gcc驅動程序而不是g++編譯C ++代碼。

更長的答案:當您調用gcc myfile.mm ,GCC驅動程序足夠聰明,可以從.mm文件擴展名中識別出您正在編譯Objective-C ++代碼,因此可以很好地對其進行編譯。 但是,在鏈接時,如果您仍然使用gcc作為驅動程序(也許您一步就能編譯並鏈接?),它就不會自動在C ++ stanbard庫(和支持目標文件)中鏈接,因此無法鏈接。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM