ไม่พบสัญลักษณ์สำหรับสถาปัตยกรรม i386


113

เมื่อพยายามคอมไพล์ด้วย Xcode ฉันได้รับข้อผิดพลาดต่อไปนี้:

  **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**

ไม่แน่ใจว่ามันหมายถึงอะไร.

คำตอบ:



92

หากคุณได้รับสิ่งนี้ปรากฏขึ้นอย่างกะทันหันโดยทั่วไปหมายความว่าโครงการขาดกรอบงานบางอย่างที่ต้องการ ไลบรารีและโครงการที่เกี่ยวข้องอาจต้องใช้เฟรมเวิร์กดังนั้นหากคุณเพิ่งเพิ่มเมื่อเร็ว ๆ นี้อาจทำให้เกิดข้อผิดพลาดนี้ได้

ในการเพิ่มกรอบให้คลิกขวาที่ชื่อโครงการในมุมมองโครงการเลือกAddจากนั้นเลือกExisting frameworks...จากรายการ จากนั้นค้นหากรอบงานที่มีสัญลักษณ์ที่คุณขาดหายไป

เกี่ยวกับวิธีที่คุณค้นหาเฟรมเวิร์กที่คุณต้องการฉันพบว่าการใช้ google เป็นวิธีที่ง่ายที่สุดแม้ว่าคุณจะสามารถใช้ Xcode ช่วยค้นหาได้เช่นกัน ค้นหาสัญลักษณ์อย่างใดอย่างหนึ่งพยายามอย่างเต็มที่เพื่อหาชื่อที่ไม่มีSCNetworkReachabilityGetFlagsการเชื่อมโยง(เช่น) จากนั้นลิงก์เอกสารแรกที่คุณพบใน developer.apple.com มักจะเป็นลิงก์ที่ถูกต้อง คุณมักจะไม่ต้องล่าไกลมาก ในกรณีนี้คือหน้านี้:

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

จากนั้นที่ด้านบนสุดของหน้าจะบอกคุณว่าจะใช้กรอบงานใดSystemConfigurationในกรณีนี้ เพิ่มสิ่งนั้นลงในโปรเจ็กต์และคอมไพล์อีกครั้ง

จากนั้นทำต่อไปจนกว่าจะได้ผล ...

แก้ไข: ฉันไม่เคยใช้เครื่องจำลอง แต่นี่คือสิ่งที่คุณทำบนอุปกรณ์ - ฉันคิดว่ามันเหมือนกัน ...


64

บางครั้งอาจมีไฟล์ต้นฉบับที่หายไปจากเป้าหมายของคุณ

  1. ตรวจสอบว่าสัญลักษณ์ใดหายไป
  2. เป้าหมาย -> สร้างเฟส -> แหล่งรวบรวม
  3. เพิ่มไฟล์ต้นฉบับที่หายไปหากไม่มีอยู่ในรายการ
  4. คำสั่ง + b สำหรับความสุข

คุณสามารถเลือกไฟล์ที่ดูเหมือนว่า "หายไป" และตรวจสอบในแถบยูทิลิตี้ทางขวามือว่ามีการเลือกช่องทำเครื่องหมายสำหรับเป้าหมายที่คุณกำลังสร้าง


1
สิ่งนี้มักเกิดขึ้นเมื่อรวมไฟล์โปรเจ็กต์สองไฟล์อย่างไม่สะอาดและการเป็นสมาชิกเป้าหมายหายไป
Steven Hepting

1
ขอบคุณมาก xcode ไม่ได้เพิ่มไฟล์. m ที่ต้องการลงในขั้นตอนการสร้าง!
dreampowder

1
ขอบคุณ :) เพิ่ม 2 ไฟล์ในโปรเจ็กต์และหลังจากทำตามขั้นตอนเหล่านั้นทุกอย่างก็
เรียบร้อย

32

ฉันแก้ไขโดยใช้วิธีการต่อไปนี้ (สำหรับ XCode 4):

1) เลือกโครงการในหน้าต่างนำทางโครงการซึ่งจะแสดงสรุปโครงการทางด้านขวา

2) เลือกขั้นตอนการสร้างแท็บที่ 4

3) เลือกลิงค์ไบนารีพร้อมตัวเลือกไลบรารี

4) เพิ่มกรอบงานที่คุณจะได้รับ

5) ย้ายกรอบงานจากโฟลเดอร์หลักไปยังโฟลเดอร์กรอบ

6) สร้างอีกครั้งและข้อผิดพลาดจะหายไป


ขอบคุณ. ฉันพบคำตอบนี้จากการค้นหา MFMailCompose และแก้ไขได้โดยการเพิ่ม MessageUI.framework
Frank Yin

17

ปัญหาคือความเป็นสมาชิกเป้าหมายสำหรับไฟล์ที่เพิ่มไว้หายไปในเป้าหมายของแอปดังนั้นเลือกไฟล์และเพิ่มเครื่องหมายถูกลงในช่องของการเป็นสมาชิกเป้าหมาย

ตัวอย่างเช่นหากข้อผิดพลาดที่แสดงในนิยามวิธีการร่วมกัน mใส่คำอธิบายภาพที่นี่


ฉันได้รับข้อผิดพลาด Symbol Not Found นี้ แต่สถานการณ์ง่ายกว่ามาก ฉันเพิ่มโมดูลใหม่ (ไฟล์) พร้อมฟังก์ชันใหม่หนึ่งอย่างที่ฉันต้องการให้กับหนึ่งในแบบแผนของฉัน เมื่อฉันสร้างรูปแบบอื่นสองสามสัปดาห์ต่อมาไม่พบการเรียกใช้ฟังก์ชันนั้น การเพิ่มไปยังเป้าหมายเป็นสิ่งที่จำเป็น
Will

17

คิดว่าจะเพิ่มโซลูชันของฉันสำหรับสิ่งนี้หลังจากใช้เวลาสองสามชั่วโมงกับข้อผิดพลาดเดียวกัน :(

คนข้างต้นถูกต้องว่าสิ่งแรกที่คุณควรตรวจสอบคือคุณพลาดการเพิ่มเฟรมเวิร์กหรือไม่ดูขั้นตอนที่ Pruthvid ให้ไว้ด้านบน

ปรากฎว่าปัญหาของฉันคือคลาสคอมไพล์ที่หายไปหลังจากที่ฉันลบมันและเพิ่มกลับเข้าไปในภายหลังอีกครั้ง

ตรวจสอบ "Compile Sources" ของคุณตามที่แสดงสำหรับคลาสข้อผิดพลาดที่รายงาน เพิ่มในชั้นเรียนที่ขาดหายไปที่คุณสร้างขึ้น


2
ขอบคุณ ... สิ่งนี้ใช้ได้กับฉัน ฉันกำลังใช้คลาสที่กำหนดเอง คัดลอกทั้งคลาสที่กำหนดเอง h และ. m เข้าไปในโครงการ มี # นำเข้า แต่ข้อผิดพลาดยังคงปรากฏอยู่ การเพิ่มคลาสที่กำหนดเอง ".m ลงในส่วน" Compile Sources "แก้ไขได้!
GeneCode

! น่ากลัว ฉันมีปัญหาเดียวกันกับ Rocotilos ฉันนำเข้าคลาสที่กำหนดเองนำเข้า แต่ยังคงมีปัญหา นี่เป็นเคล็ดลับ! ขอบคุณมาก!
Souleiman

8

ตรวจสอบให้แน่ใจว่าเฟรมเวิร์กที่ขาดหายไปนั้นแสดงอยู่ใน"Target / Build Phases / Link Binary With Libraries"หากไม่เพียงแค่เพิ่ม ตามที่กล่าวไว้ก่อนหน้านี้มักจะระบุกรอบที่ขาดหายไป

ในโปรเจ็กต์ของฉันมีเฟรมเวิร์กที่เหมือนกันอยู่สองรายการเมื่อฉันลบหนึ่งในนั้นฉันมีข้อผิดพลาดนี้เนื่องจากมันได้ลบออกจากรายการ "ลิงก์ไบนารีกับไลบรารี" ด้วย ฉันเพิ่มกลับและปัญหาก็หายไป (และฉันยังมีสองกรอบอยู่ในรายการ)


6

ฉันแก้ไขข้อผิดพลาดที่คล้ายกันในโครงการของฉันโดยเปลี่ยนการตั้งค่าการสร้าง> สถาปัตยกรรมสำหรับเป้าหมายทั้งหมดของฉัน

ปัญหา: เมื่อฉันอัปเกรดจาก Xcode 4.4 เป็น Xcode 4.5 โครงการของฉันยังคงคอมไพล์บนโปรแกรมจำลองได้ดี แต่ไม่ได้รวบรวมบนอุปกรณ์ บนอุปกรณ์มันส่งข้อผิดพลาด"ไม่พบสัญลักษณ์สำหรับสถาปัตยกรรม armv7s"พร้อมกับ "ข้อผิดพลาด Apple Mach-O Linker" และ "clang: error: linker ที่ทำให้เข้าใจผิดโดยใช้รหัสออก 1 (ใช้ -v เพื่อดูการเรียกใช้ )."

สาเหตุ (ในกรณีของฉัน): โครงการของฉันมีหลายเป้าหมายและแม้ว่าการตั้งค่าการสร้าง> สถาปัตยกรรมสำหรับเป้าหมายหลักจะถูกตั้งค่าให้รวมสถาปัตยกรรม armv7s แต่เป้าหมายหลักก็ขึ้นอยู่กับเป้าหมายอื่น (อยู่ในขั้นตอนการสร้าง> การอ้างอิง) และ ฉันไม่คิดที่จะรีเซ็ตการตั้งค่าการสร้าง> สถาปัตยกรรมสำหรับเป้าหมายอื่น ๆ และฉันต้องเปลี่ยนเพื่อรวม armv7s ฉันคิดว่าเครื่องจำลองและอุปกรณ์ทำงานบนสถาปัตยกรรมที่แตกต่างกันและนั่นเป็นสาเหตุที่เครื่องจำลองนั้นใช้ได้ในขณะที่อุปกรณ์ไม่อยู่


5

โปรเจ็กต์ของคุณขึ้นอยู่กับโปรเจ็กต์อื่นหรือไม่และเป้าหมายในโปรเจ็กต์นั้นถูกตั้งขึ้นเพื่อเป็นการพึ่งพาโดยตรงของเป้าหมายหลักของคุณหรือไม่? หากเป็นกรณีนี้และไม่ได้ตั้งค่าการอ้างอิงเป้าหมายที่อ้างอิงอาจไม่ได้รับการสร้างขึ้นสำหรับการกำหนดค่าทั้งหมด (เช่นตัวจำลอง)

เพียงแค่เดาป่า


4

อีกสถานการณ์หนึ่งที่อาจทำให้เกิดปัญหานี้คือถ้ารหัสของคุณเรียกใช้ C ++ หรือเรียกโดยรหัส C ++ ฉันมีปัญหากับฟังก์ชันยูทิลิตี้ของไฟล์. c ของตัวเองที่แสดงเป็น "ไม่พบสัญลักษณ์" เมื่อเรียกจาก Obj-C การแก้ไขคือการเปลี่ยนประเภทไฟล์: ใน Xcode 4 ใช้บานหน้าต่างข้อมูลเพิ่มเติมเพื่อตั้งค่าประเภทไฟล์เป็น "Objective-C ++ Source"; ใน Xcode 3 ใช้ "รับข้อมูล" เพื่อเปลี่ยนประเภทไฟล์เป็น "source.cpp.objcpp"


4

ในกรณีของฉันไม่มีวิธีแก้ไขปัญหาใดที่โพสต์ได้ผล ผมต้องลบโครงการและทำให้เช็คเอาท์สดจากเซิร์ฟเวอร์ SVN โชคดีที่โครงการนี้โฮสต์ในระบบควบคุมเวอร์ชัน ไม่รู้ว่าฉันจะทำอะไรเป็นอย่างอื่น


2

ในโปรเจ็กต์ C ++ โดยใช้คลาสtemplatized ที่กำหนดไว้ในขณะที่ได้รับข้อผิดพลาดเดียวกันฉันเลือกไฟล์. cpp ด้วยคลาสtemplatized ที่กำหนดไว้ใน Project Navigator จากนั้นลบ> ลบการอ้างอิง นอกจากนี้ไฟล์. h ที่เกี่ยวข้องในขณะที่ยังคงอ้างอิงในโปรเจ็กต์จำเป็นต้องมีคำสั่ง #include ไปยัง. cpp ดังนี้:

#ifndef __CircularBuffer__CircularBufferT__
#define __CircularBuffer__CircularBufferT__

... snip ...

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

หากคุณต้องการดูตัวอย่างโครงการง่ายๆอยู่ใน github :

นี่เป็นกลอุบายเล็กน้อยและฉันจำแหล่งที่มาดั้งเดิมของวิธีแก้ปัญหานี้ไม่ได้


2

หากข้อผิดพลาดนี้ปรากฏขึ้นอย่างกะทันหันหมายความว่าโครงการขาดกรอบงานบางส่วน ไลบรารีและโครงการที่เกี่ยวข้องอาจต้องใช้เฟรมเวิร์กดังนั้นหากคุณเพิ่งเพิ่มเมื่อเร็ว ๆ นี้อาจทำให้เกิดข้อผิดพลาดนี้ได้

ในการเพิ่มเฟรมเวิร์กคลิกขวาที่ชื่อโปรเจ็กต์ในมุมมองโปรเจ็กต์เลือกเพิ่มจากนั้นเลือกเฟรมเวิร์กที่มีอยู่จากรายการ จากนั้นค้นหากรอบงานที่มีสัญลักษณ์ที่คุณขาดหายไป

อีกอย่างคือถ้าคุณเพิ่มคลาสใด ๆ ในรีซอร์สที่คอมไพล์แล้วและลบคลาสนั้นออกจากโปรเจ็กต์ข้อผิดพลาดจะปรากฏขึ้น สิ่งที่ดีที่สุดที่ต้องทำคือลบคลาสออกจากทรัพยากรการคอมไพล์ (การตั้งค่าการสร้าง -> แหล่งที่มาของการคอมไพล์) ซึ่งได้ลบออกจากโปรเจ็กต์

ในกรณีของฉันฉันได้เพิ่มคลาส admob ในโครงการและรวบรวมโปรเจ็กต์ ในภายหลังฉันไม่ต้องการรวมผู้ดูแลระบบในโครงการของฉันดังนั้นฉันจึงลบการอ้างอิงของคลาส admob ออกจากโครงการของฉัน เมื่อเกิดข้อผิดพลาดนี้ฉันได้ลบคลาส. m ของ admob ออกจากคอมไพล์รีซอร์สเพื่อแก้ไขปัญหานี้


2

สิ่งนี้เกิดขึ้นกับฉันขณะพยายามคัดลอกไลบรารีสาธิตPSPDFKITไปยังโครงการของฉัน ฉันทำตามคำแนะนำทั้งหมดในไซต์ + คำแนะนำทั้งหมดในหน้านี้ .. ด้วยเหตุผลบางประการที่ยังคงให้ข้อผิดพลาดข้างต้นปัญหาคือถ้าฉัน grepped ข้อความในวิธีการแสดงข้อผิดพลาด .. มันจะปรากฏในไบนารีเท่านั้น ( เห็นได้ชัดว่าฉันไม่สามารถเข้าถึงซอร์สโค้ด b / c ได้ฉันต้องจ่ายเงิน)

ฉันสังเกตเห็นสิ่งนี้ในหน้าคำแนะนำแม้ว่า:

ใส่คำอธิบายภาพที่นี่

ดังนั้นฉันจึงไปที่ความกล้าของไฟล์ config และพบสิ่งนี้:

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

จากนั้นฉันก็ไปที่โครงการตัวอย่างที่จัดทำโดยผู้เขียนของไลบรารีดังกล่าว .. และสังเกตว่าแฟล็กก่อนหน้านี้ที่คัดลอกคำต่อคำไปยังแฟล็กตัวเชื่อมอื่น ๆ ในการตั้งค่าบิลด์ของฉัน .. อย่างไรก็ตามในโปรเจ็กต์ของฉัน .. มันไม่ใช่! .. ดังนั้น ฉันแค่คัดลอกและวางลงในการตั้งค่าการสร้างของโครงการของฉันแฟล็กตัวเชื่อมโยงอื่น ๆ และทุกอย่างก็ใช้ได้!

ประเด็นสำคัญ: หากคุณกำลังใช้ไฟล์. xcconfig บางไฟล์ในการตั้งค่าของคุณให้ตรวจสอบอีกครั้งกับซอร์สโค้ดตัวอย่างหรือบางสิ่งบางอย่างและตรวจสอบให้แน่ใจว่าได้นำไปใช้จริง .. มันไม่ได้ใช้อย่างถูกต้องในกรณีของฉัน


0

อีกสาเหตุหนึ่งที่อาจเกิดขึ้นคือเมื่อคุณอัปเกรด SDK

หากคุณเพียงแค่ลบกลุ่มจากนั้นลากและวางโฟลเดอร์ใหม่ไปยังโปรเจ็กต์ "เส้นทางการค้นหาไลบรารี" จะมีทั้ง SDK ในการแก้ปัญหาเพียงแค่ลบเส้นทาง SDK เก่า


0

ฉันใช้ CLGeocoder โดยไม่ต้องเพิ่ม Core.Location Framework โดยทั่วไปข้อผิดพลาดนี้อาจหมายถึงหลายสิ่ง ฉันหวังว่านี่จะช่วยคนอื่นได้


0

ฉันเคยนิ่งงันกับสิ่งนี้ก่อนที่จะรู้ว่าฉันเพิ่ม @ อินเทอร์เฟซสำหรับข้อมูลเท่านั้นและลืมเพิ่มบล็อก @implementation ที่ว่างเปล่า


0

เจอปัญหานี้ใน Xcode 11 การแก้ไขกำลังเปลี่ยนเป้าหมายการปรับใช้ขั้นต่ำจาก 10.0 เป็น 11.0 หวังว่านี่จะช่วยใครบางคน :)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.