ข้อผิดพลาดในการสร้าง - ขาดสถาปัตยกรรมที่จำเป็น i386 ในไฟล์


105

ฉันได้รับข้อผิดพลาดนี้เมื่อสร้างแอปพลิเคชัน iPhone ของฉัน:

ld: คำเตือน: ใน /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.sdk/System/Library /Frameworks/UIKit.framework/UIKit ไม่มีสถาปัตยกรรมที่จำเป็น i386 ในไฟล์

มันจะเหมือนกันสำหรับกรอบงานทั้งหมดในแอปของฉัน มันแปลกมากเนื่องจากไม่ได้เกิดขึ้นก่อนหน้านี้


สิ่งนี้เกิดขึ้นหลังจากที่คุณติดตั้ง Snow Leopard และ iPhone SDK (Xcode 3.2) ใหม่หรือไม่
avocade

8
คำตอบของฉันช่วยแก้ปัญหาได้ โปรดตรวจสอบ.
จอร์แดน

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

@aroth ถูกต้องเช่นกันโปรดตรวจสอบคำถาม
ArkReversed

คำตอบ:


131

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

การแก้ไขคือตรวจสอบไดเร็กทอรีโปรเจ็กต์ของคุณ (ที่คุณจัดเก็บโปรเจ็กต์ของคุณบนดิสก์) สำหรับไฟล์ iPhone SDK * .Framework ใด ๆ และลบออก

โครงการจะสร้างได้ดีในภายหลัง


4
นอกจากนี้ให้ทดสอบบนอุปกรณ์ iOS แทนโปรแกรมจำลอง
Raptor

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

ไม่ได้ผลสำหรับฉัน ไม่มีไฟล์. frameework ในไดเรกทอรีโครงการของฉัน Fwiw ฉันทำความสะอาดแล้วสร้างและปัญหานี้ก็เริ่มขึ้น การทำความสะอาดจะต้องมีสิ่งที่แตกหัก
Alyoshak

85

ฉันมีปัญหาเดียวกันนี้และวิธีแก้ปัญหาก็แก้ไขได้ง่าย สำรองข้อมูลจากนั้นเปิด project.pbxproj (อยู่ภายในชุดไฟล์โครงการของคุณ) ใน TextMate หรือ TextEdit และค้นหาส่วนที่ชื่อว่า "/ * Begin XCBuildConfiguration section * /" มองหาคีย์ชื่อ FRAMEWORK_SEARCH_PATHS และลบออกและเป็นเนื้อหา (หนึ่งครั้งต่อการกำหนดค่าการสร้างดังนั้นฉันจึงลบออกในสองที่) นี่คือตัวอย่างของสิ่งที่ฉันลบ:

FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"\"$(DEVELOPER_DIR)/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.sdk/System/Library/Frameworks\"",);

ตอนนี้โครงการของฉันสร้างขึ้นสำหรับทั้งอุปกรณ์ iPhone และ iPhoneSimulator


2
ฉันสามารถตรวจสอบได้ว่าทำงานได้ตามที่อธิบายไว้ ดูเหมือนว่า Xcode จะไม่สามารถสัมผัสกับข้อมูลเมตาได้อย่างง่ายดายเมื่อย้าย Xcode projs ระหว่างคอมพิวเตอร์เครื่องอื่น ในกรณีนี้โดยมี 3.0 และ Leopard และอีก 3.1 และ Snow Leopard ติดตั้ง ข้อมูลเมตา FRAMEWORK_SEARCH_PATHS แสดงเป็นช่องว่างในการตั้งค่าการสร้างในขณะที่ project.pbxproj จริงมีสิ่งต่างๆอยู่ในนั้น
avocade

1
FRAMEWORK_SEARCH_PATHS ที่ตกลงกันยังแสดงเป็นช่องว่างในการตั้งค่าการสร้างสำหรับฉันเช่นกัน อย่างไรก็ตามการแก้ไขไฟล์ project.pbxproj ด้วยมือตามที่อธิบายไว้ช่วยแก้ปัญหาได้
Alasdair Allan

11
สิ่งนี้ไม่ได้ผลสำหรับฉัน อย่างไรก็ตามคุณพาฉันไปยังสถานที่ที่เหมาะสมที่จะมอง .pbxproj ของฉันไม่มีคีย์ FRAMEWORK_SEARCH_PATHS แต่มีคีย์ชื่อ LIBRARY_SEARCH_PATHS
กบฏ

ฉันสอง @rebellion บางที XCode เวอร์ชันใหม่กว่าอาจเปลี่ยนชื่อคีย์
Moshe

ขอบคุณฉันยังมีคีย์ LIBRARY_SEARCH_PATHS หลงทางในไฟล์ pbxproj ของฉัน คีย์ปรากฏเป็นตัวหนาในการตั้งค่าโครงการใน Xcode 3 แต่ไม่มีค่า สิ่งนี้ทำให้ฉันเชื่อว่ามีบางอย่างผิดปกติ ฉันเปิดโปรเจ็กต์ใน Xcode 4 Preview 5 หนึ่งครั้งหลังจากนั้นสิ่งนี้ก็เกิดขึ้น
mvexel

43

สิ่งที่เกิดขึ้นที่นี่คือ Xcode ได้เพิ่มรายการ "Framework Search Paths" อย่างลึกลับซึ่งชี้ไปยัง SDK อุปกรณ์ iPhone โดยเฉพาะ ตัวอย่างเช่นฉันเพิ่งตั้งค่าเป็น:

$(DEVELOPER_DIR)/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS2.2.1.sdk/System/Library/Frameworks

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


นี่คือปัญหาในกรณีของฉัน มีการเพิ่มไดเรกทอรีการค้นหาจำนวนมากทุกครั้งที่ฉันเพิ่มไลบรารีใหม่ แม้ว่าฉันจะลบการอ้างอิงรายการไดเร็กทอรีการค้นหาที่เคยมีซึ่งทำให้เกิดปัญหา
darshansonde

"Framework Search Paths" ว่างเปล่าแล้วในกรณีของฉัน ข้อผิดพลาดที่แน่นอนที่ฉันได้รับคือld: การสร้างสำหรับ iOS Simulator แต่การเชื่อมโยงกับ dylib ที่สร้างขึ้นสำหรับไฟล์ MacOSX '/usr/lib/libSystem.B.dylib' สำหรับสถาปัตยกรรม i386 clang: error: คำสั่ง linker ล้มเหลวด้วยรหัสออก 1 ( ใช้ -v เพื่อดูการเรียก) ฉันใช้ SDK 7.0 บน Mavericks
ตอบ

ฉันมีข้อผิดพลาดเดียวกันฉันลบค่าออกจากเส้นทางการค้นหาเฟรมเวิร์กภายใต้การตั้งค่าการสร้างและตอนนี้รวบรวมได้สำเร็จ
Nirav

10

ฉันแค่อยากจะพูดถึงเรื่องนี้ใน XCode หากคุณไปที่ "แก้ไขการตั้งค่าโครงการ" และพบ "เส้นทางการค้นหา" จะมีฟิลด์สำหรับ "Framework Search Paths" การอัปเดตสิ่งนี้ควรแก้ไขปัญหาโดยไม่ต้องแฮ็กไฟล์โครงการ!

ไชโย!

เจสซี่


ฉันมีปัญหาเดียวกันที่ทำให้ฉันแทบคลั่ง ดูเหมือนว่าพวกคุณจะรู้วิธีแก้ปัญหา แต่ฉันไม่พบไฟล์ "project.pbxproj" และไม่พบตำแหน่ง "แก้ไขการตั้งค่าโครงการ"
saman01

2
ใน XCode 4.2.1 ฉันพบสิ่งนี้ดังนี้: คลิกที่ชื่อโปรเจ็กต์ใน Project Navigator ในหน้าจอคุณสมบัติที่ปรากฏขึ้นให้เลือกแท็บ 'สร้างการตั้งค่า' เส้นทางการค้นหาอยู่ในหน้าจอนี้ การลบออกได้ผลสำหรับฉัน
dsteele

8

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

สิ่งนี้แก้ไขให้ฉัน!


8

ฉันแก้ไขด้วยวิธีอื่นสาเหตุที่ฉันได้รับข้อผิดพลาดนี้คือฉันเพิ่ม security.framework สองครั้งในโปรเจ็กต์ของฉันฉันไม่สามารถเห็นกรอบความปลอดภัยใน xcode ฉันเปิดโปรเจ็กต์ในตัวค้นหาและพบเฟรมเวิร์กนี้ซึ่ง ฉันลบและแก้ไขปัญหาแล้ว


7

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


5

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

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

ประการที่สองคุณสามารถคลิกขวาที่โปรเจ็กต์ใน XCode / Get Info / Build / Library Search Paths เพิ่มเส้นทางใหม่ที่คล้ายกับ /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.1.sdk/usr/lib เพิ่มเวอร์ชันที่เหมาะสมของสตริงนั้นสำหรับแต่ละเวอร์ชัน (2.2.1 ฯลฯ ) และแพลตฟอร์ม (ตัวจำลองหรือ iPhoneOS) ดำเนินการที่คล้ายกันสำหรับ Framework Search Paths หากเฟรมเวิร์กเป็นปัญหาของคุณ

ประการที่สามซึ่งทำงานได้มากกว่า แต่น่าเชื่อถือกว่าคือการเปิด project.pbxproj จากภายใน MyProject.xcodeproj (Textmate นั้นดีสำหรับสิ่งนี้) มองหา "/ * Begin XCBuildConfiguration section * /" ตามด้วย "LIBRARY_SEARCH_PATHS" และ "FRAMEWORK_SEARCH_PATHS" เพิ่มหรือแก้ไขเส้นทางตามความเหมาะสมและบันทึกไฟล์

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


ฉันจะเพิ่งเริ่มโครงการใหม่ โอ้บ่อน้ำ
Gabe Shahbazian

คุณสามารถแก้ไขการตั้งค่าการสร้าง "Frameworks Search Paths" จากแผงข้อมูลของเป้าหมาย
John Cromartie

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

วิธีนี้ใช้ได้ผลสำหรับฉัน ฉันมีชุดโครงการที่ใช้งานได้ซึ่งหยุดสร้างกะทันหันสำหรับการกำหนดค่าหนึ่งวัน ไม่มีเหตุผล. ใช้เทคนิค textmate ด้านบนและสังเกตว่า "$ (SDKROOT) / Developer / Library / Frameworks" หายไปจากการกำหนดค่านั้น ไม่รู้ว่าทำไมและฉันไม่เห็นสิ่งนี้โดยใช้ Xcode
ร็อบ

4

"แก้ไขการตั้งค่าโครงการ" และค้นหา "เส้นทางการค้นหา" มีฟิลด์สำหรับ "Framework Search Paths" ลบทั้งหมด!!


4

มันเพิ่งเกิดขึ้นที่นี่เช่นกัน ขอขอบคุณพันธมิตรที่ยอดเยี่ยมที่เราพบคำตอบ Xcode ของคุณอาจชี้ไปที่เครื่องจำลอง .. เปลี่ยนเป็นอุปกรณ์ IOS แทน .. สร้างได้อย่างราบรื่นหลังจาก ....


1

เรียกใช้คำสั่งไฟล์บนเฟรมเวิร์กจาก Terminal:

file /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.sdk/System/Library /Frameworks/UIKit.framework/UIKit

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

หากคุณได้รับข้อผิดพลาดอื่น ๆ หวังว่าจะช่วยให้คุณทราบว่าปัญหาที่แท้จริงคืออะไร


ติดตั้ง sdk ใหม่และฉันยังคงได้รับข้อผิดพลาดในการสร้างเหมือนเดิม
Gabe Shahbazian

ฉันมีปัญหานี้ ตรวจสอบเฟรมเวิร์กและเส้นทางไลบรารีแล้วและสะอาด ไฟล์คำสั่ง /Developer/Platforms.../UIKit.framework/UIKit ระบุว่า "Mach-O dynamically linked library arm" จำเป็นต้องติดตั้ง SDK ทั้งหมดหรือไม่หรือฉันสามารถคัดลอกเฟรมเวิร์กเวอร์ชันเต็มได้หรือไม่
Alexander Fradiani

เรียนเก่ง! สำหรับกรณีของฉัน armv7 และ i386 อยู่ที่นั่น แต่ไม่มี armv6!
Nianliang

1

ฉันแค่อยากจะแจ้งให้คุณทราบว่าในกรณีของฉันฉันประสบปัญหาเดียวกันฉันตระหนักว่าฉันมีโฟลเดอร์ Xcode รุ่นเก่าชื่อ Xcode3.1.3 ฉันเพิ่งเปลี่ยนชื่อใหม่เพราะเป็นเวอร์ชันเก่ากว่าและนั่นก็สร้างความมหัศจรรย์ให้กับฉัน


1

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

คุณสามารถลบรายการทั้งหมดในส่วนนี้


0

ฉันเพิ่งพบบางสิ่งที่แตกต่างไปเล็กน้อยเนื่องจากฉันทำงานในไลบรารีของตัวเอง (WM_GSRecognizerLib) แต่ข้อผิดพลาดก็เหมือนกัน

จะเกิดอะไรขึ้น: เนื่องจากการอัปเดตบางอย่างเส้นทางที่กำหนดเป้าหมายไปยัง lib ที่จะรวม (.a) มาจากโฟลเดอร์ "Debug-iphoneos" (ที่สร้างขึ้น) การคอมไพล์สำหรับอุปกรณ์ iOS ทั่วไปทำงานได้ดี แต่ไม่ใช่สำหรับโปรแกรมจำลองการบ่นเกี่ยวกับสถาปัตยกรรม i386 ที่หายไป

สิ่งที่ฉันทำสำหรับปัญหานี้คือการรวมไบนารีจากโฟลเดอร์ "Debug-iphonesimulator" ด้วย

สามารถช่วยได้สำหรับหัวข้อนี้เนื่องจากมีคำอธิบายอยู่ที่นี่: อุปกรณ์ต้องการไบนารีสำหรับ arm64 / armv7 / armv7s ในขณะที่โปรแกรมจำลองต้องใช้ i386


0

วิธีแก้ปัญหาของฉันคือการตั้งค่าในการดีบักเป้าหมายโปรแกรมจำลองใช่เพียงแค่ดูสถานะคอมไพล์เพื่อดูบรรทัดใหม่ที่เพิ่มเป็นสถาปัตยกรรมใน. project เท่านั้น หากคุณไม่ได้ตั้งค่าสิ่งนี้การสร้างจะทำงานไปยังสถาปัตยกรรมทั้งหมดและจะแสดงสถาปัตยกรรมที่ขาดหายไปเช่น i386 หรืออื่น ๆ หมายเหตุเห็นได้ชัดว่าปัญหาหลักคือการใช้กรอบการทำงานบางอย่างที่ใช้สถาปัตยกรรมเฉพาะบางประเภท


-1

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

ในตัวเลือกการค้นหาฉันพิมพ์เส้นทางการค้นหา Frameworkและลบการตั้งค่าทั้งหมดจากนั้นคลิกปุ่มสร้างและมันก็ใช้ได้ผลสำหรับฉัน

ขอบคุณและขอแสดงความนับถือ

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