2011-01-29 68 views
104

當試圖在Xcode,我收到以下錯誤編譯:符號(S)沒有找到i386硬件架構

**Ld /Users/doronkatz/Library/Developer/Xcode/DerivedData/iKosher-bphnihrngmqtkqfgievrrumzmyce/Build/Products/Debug-iphonesimulator/iKosher.app/iKosher normal i386 
    cd /Users/doronkatz/Sites/xCode/iKosher 
    setenv MACOSX_DEPLOYMENT_TARGET 10.6 
    setenv PATH "/Xcode4/Platforms/iPhoneSimulator.platform/Developer/usr/bin:/Xcode4/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin" 
    /Xcode4/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc-4.2 -arch i386 -isysroot /Xcode4/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.2.sdk -L/Users/doronkatz/Library/Developer/Xcode/DerivedData/iKosher-bphnihrngmqtkqfgievrrumzmyce/Build/Products/Debug-iphonesimulator -L/Users/doronkatz/Sites/xCode/iKosher -F/Users/doronkatz/Library/Developer/Xcode/DerivedData/iKosher-bphnihrngmqtkqfgievrrumzmyce/Build/Products/Debug-iphonesimulator -filelist /Users/doronkatz/Library/Developer/Xcode/DerivedData/iKosher-bphnihrngmqtkqfgievrrumzmyce/Build/Intermediates/iKosher.build/Debug-iphonesimulator/iKosher.build/Objects-normal/i386/iKosher.LinkFileList -mmacosx-version-min=10.6 -all_load -ObjC -Xlinker -objc_abi_version -Xlinker 2 -lz -framework Security -framework CFNetwork -framework CoreData -framework Foundation -framework UIKit -framework CoreGraphics -framework QuartzCore -o /Users/doronkatz/Library/Developer/Xcode/DerivedData/iKosher-bphnihrngmqtkqfgievrrumzmyce/Build/Products/Debug-iphonesimulator/iKosher.app/iKosher 

Undefined symbols for architecture i386: 
    "_UTTypeCreatePreferredIdentifierForTag", referenced from: 
     +[ASIHTTPRequest mimeTypeForFileAtPath:] in ASIHTTPRequest.o 
    "_UTTypeCopyPreferredTagWithClass", referenced from: 
     +[ASIHTTPRequest mimeTypeForFileAtPath:] in ASIHTTPRequest.o 
    "_kUTTagClassMIMEType", referenced from: 
     +[ASIHTTPRequest mimeTypeForFileAtPath:] in ASIHTTPRequest.o 
    "_kUTTagClassFilenameExtension", referenced from: 
     +[ASIHTTPRequest mimeTypeForFileAtPath:] in ASIHTTPRequest.o 
    "_SCNetworkReachabilitySetCallback", referenced from: 
     -[Reachability startNotifier] in Reachability.o 
    "_SCNetworkReachabilityScheduleWithRunLoop", referenced from: 
     -[Reachability startNotifier] in Reachability.o 
    "_SCNetworkReachabilityUnscheduleFromRunLoop", referenced from: 
     -[Reachability stopNotifier] in Reachability.o 
    "_SCNetworkReachabilityCreateWithName", referenced from: 
     +[Reachability reachabilityWithHostName:] in Reachability.o 
    "_SCNetworkReachabilityCreateWithAddress", referenced from: 
     +[Reachability reachabilityWithAddress:] in Reachability.o 
    "_SCNetworkReachabilityGetFlags", referenced from: 
     -[Reachability currentReachabilityStatus] in Reachability.o 
     -[Reachability isReachable] in Reachability.o 
     -[Reachability isConnectionRequired] in Reachability.o 
     -[Reachability isConnectionOnDemand] in Reachability.o 
     -[Reachability isInterventionRequired] in Reachability.o 
     -[Reachability isReachableViaWWAN] in Reachability.o 
     -[Reachability isReachableViaWiFi] in Reachability.o 
     ... 
ld: symbol(s) not found for architecture i386 
collect2: ld returned 1 exit status** 

不知道這意味着什麼。

回答

91

如果你突然出現這種情況,通常意味着項目缺少一些它需要的框架。庫和從屬項目可能需要框架,所以如果您最近添加了一個,那麼可能會導致此錯誤。

要添加框架,請右鍵單擊項目視圖中的項目名稱,選擇Add,然後從列表中選擇Existing frameworks...。然後找到你丟失的符號的框架。

至於你如何找到你需要的框架,我發現使用谷歌最簡單,儘管你也可以使用Xcode幫助搜索。搜索其中一個符號,盡力找出未加密的名稱(例如SCNetworkReachabilityGetFlags),然後在developer.apple.com上找到的第一個文檔鏈接通常是正確的。你通常不必非常遠。在這種情況下,這是此頁:

https://developer.apple.com/documentation/systemconfiguration/scnetworkreachability-g7d

然後在頁面的頂部,它會告訴你在這種情況下使用,SystemConfiguration其框架。所以將其添加到項目中,然後重新編譯。

然後就繼續做,直到它的工作原理...

編輯:我從來沒有使用模擬器,但是這是你的設備上做什麼 - 我認爲這是相同的......

4

您的項目是否依賴於另一個項目,並且該項目中的目標是否被設置爲您的主要目標的直接依賴項?如果是這種情況並且沒有設置依賴關係,則可能不會爲所有配置(即模擬器)構建相關目標。

只是瘋狂的猜測。

30

我解決它使用下面的方法(的XCode 4):

1)選擇在項目導航窗口中的項目,該項目將顯示在右側

項目總結

2)選擇第4個選項卡建設階段

3)選擇鏈接二進制與庫選項

4)添加框架,你越來越

5)移動從主文件夾中的框架,框架文件夾

6)重新生成它和錯誤都沒有了。

+0

謝謝。我在搜索MFMailCompose時找到了這個答案,並通過添加MessageUI.framework來解決。 – 2012-12-15 13:42:39

3

可能導致此問題的另一種情況是,如果您的代碼調用C++或被C++代碼調用。從Obj-C調用時,我遇到了自己的.c文件的實用程序功能,該功能顯示爲「找不到符號」。解決方法是更改​​文件類型:在Xcode 4中,使用擴展信息窗格將文件類型設置爲「Objective-C++ Source」;在Xcode 3中,使用「Get Info」將文件類型更改爲「source.cpp.objcpp」。

7

確保缺少的框架實際上列在「目標/構建階段/鏈接二進制庫」如果不是隻是添加它。如前所述,它通常表示缺少框架。

在我的項目中列出了兩個相同的框架,當我刪除其中的一個時,出現此錯誤,因爲它也從「Link Binary With Libraries」列表中刪除它。 我加回來,問題消失(我仍然有兩個框架列出)

63

有時候有源文件從目標中丟失。

  1. 檢查哪些符號丟失
  2. 靶>建立phases->編譯源
  3. 添加缺少的源文件,如果它們未列出
  4. 命令+ B爲幸福

您可以選擇似乎「缺失」的文件,並在右側的實用工具欄中選中爲您正在構建的目標選中其複選框。

+1

這經常會在合併兩個項目文件時不當並且目標成員資格丟失時發生。 – 2012-06-05 00:44:16

+1

非常感謝你,不知何故xcode沒有將所需的.m文件添加到構建階段階段! – dreampowder 2012-10-15 20:33:29

+1

謝謝:) 添加2個文件到項目中,只有在完成這些步驟之後,所有內容都是O.K – user1105951 2013-06-23 10:39:06

16

思來加我爲這個解決方案,在同樣的錯誤:(

傢伙以上是正確的,你應該檢查的第一件事情是你是否已經錯過了加入任何框架花了幾個小時後,看到通過Pruthvid上面提供的步驟。

我的問題,它橫空出世,是一個編譯類失蹤後,我刪除了它,後來又增加了重新插上。

檢查「編譯源」如圖所示爲報道錯誤類別添加您創建的任何缺失類別

3

在我的情況下,沒有發佈的解決方案工作。 我不得不刪除該項目,並從SVN服務器重新簽出。幸運的是,這個項目被託管在版本控制系統中。不知道我會做什麼,否則。

0

這可能發生的另一個原因是您升級SDK時。

如果您只需刪除該組,然後將新文件夾拖放到項目中,則「庫搜索路徑」將包含這兩個SDK。要解決,只需刪除舊的SDK路徑。

1

在使用定義的模板化,同時接收相同的錯誤一個C++項目,我選擇cpp文件與項目導航定義的模板化類,則刪除>刪除參考。另外,相關的.h文件中,而該項目仍然被引用,需要有一個#include語句到的.cpp如下:

#ifndef __CircularBuffer__CircularBufferT__ 
#define __CircularBuffer__CircularBufferT__ 

... snip ... 

#include "CircularBufferT.cpp" 
#endif /* defined(__CircularBuffer__CircularBufferT__) */ 

如果你想看到的,一個簡單的項目的例子是on github

這是一個間接的詭計,我不記得這個解決方法的原始來源。

5

我通過改變生成設置>架構ALL我的目標固定在我的項目類似的錯誤。

問題: 當我從Xcode 4.4升級到Xcode 4.5時,我的項目仍然在模擬器上編譯好,但沒有在設備上編譯。在設備上,它拋出錯誤「架構armv7找不到符號」,以及誤導性的「Apple Mach-O鏈接器錯誤」和「clang:error:linker命令失敗,退出代碼1(使用-v to請參閱調用)「。

原因(對我來說): 我的項目有多個目標,即使生成設置>爲主要目標架構設定包括armv7s架構,主要目標依賴於其它目標(在Build Phases> Dependencies下面列出),並且我沒有想過爲該另一個目標重置構建設置>體系結構,我不得不改變它以包含armv7s。 我想模擬器和設備運行在不同的架構上,這就是爲什麼模擬器沒有問題的原因。

1

如果這個錯誤突然出現,這意味着該項目缺少一些框架。庫和從屬項目可能需要框架,所以如果您最近添加了一個,那麼可能會導致此錯誤。

要添加框架,請右鍵單擊項目視圖中的項目名稱,選擇添加,然後從列表中選擇現有框架。然後找到你丟失的符號的框架。

另一件事是,如果您在編譯的資源中添加了任何類並從項目中刪除了這些類,則會顯示錯誤。最好的辦法是從編譯資源(構建設置 - >編譯源代碼)中刪除已從項目中刪除的類。

在我的情況下,我已經在項目中添加了admob類並編譯了項目。在後面的情況下,我不想在我的項目中包含admobs,所以我從我的項目中刪除了admob類的引用。當發生這個錯誤時,我從編譯資源中刪除了admob的.m類,解決了這個問題。

1

在我嘗試將PSPDFKIT演示庫複製到我的項目中時,發生了這種情況。我遵循網站上的所有說明+本頁面上的所有建議..出於某種原因,它一直在給出上述錯誤,問題是,如果我在錯誤方法中grepped消息..它只出現在二進制文件顯然我無法訪問源代碼b/c我必須付錢)。

我在指令頁注意到了這一點,雖然:

enter image description here

所以我去的那配置文件的膽量,發現這個:

OTHER_LDFLAGS=$(inherited) -ObjC -fobjc-arc -lz -framework CoreText -framework CoreMedia -framework MediaPlayer -framework AVFoundation -framework ImageIO -framework MediaPlayer -framework MessageUI -framework CoreGraphics -framework Foundation -framework QuartzCore -framework AVFoundation -framework CFNetwork -framework MobileCoreServices -framework SystemConfiguration -weak_framework UIKit 

然後我去了示例項目並且注意到之前的標誌在我的構建設置中逐字複製到了其他鏈接器標誌中..但是在我的項目中它們不是!因此我只是將它們複製並粘貼到我的項目的建設d設置其他鏈接器標誌和一切工作!

拿走點:如果你依賴於你的設置上的一些.xcconfig文件,請仔細檢查一下示例代碼源或者其他東西,並確保它已經被實際應用..在我的情況下它沒有正確應用

15

的問題是對於添加的日提交的丟失到應用目標。所以選擇該文件和該複選標記添加到

例如,如果在一個方法定義示於錯誤的目標成員框目標成員common.m enter image description here

0

我曾經使用CLGeocoder而不添加Core.Location框架。基本上這個錯誤可能意味着多種事情。我希望這可以幫助別人。

0

我已經被這個難住了,只是爲了實現我添加了純數據@interface,並忘記添加空的@implementation塊。

相關問題