ไฟล์เป็นสากล (สามชิ้น) แต่ไม่มีข้อผิดพลาดชิ้น (n) ARMv7-s สำหรับไลบรารีแบบคงที่บน iOS แล้วจะข้ามหรือไม่


403

ฉันอัพเกรดรุ่นXcodeและเมื่อใช้ห้องสมุดคงที่ภายนอกฉันได้รับข้อความนี้:

ld: file เป็นสากล (3 ชิ้น) แต่ไม่มีชิ้นส่วน (n) armv7s: / file / location สำหรับสถาปัตยกรรม armv7s clang: ข้อผิดพลาด: คำสั่ง linker ล้มเหลวด้วยรหัสทางออก 1 (ใช้ -v เพื่อดูการเรียกใช้)

มีวิธีใดบ้างในการหลีกเลี่ยงสิ่งนี้และเพิ่มการสนับสนุนให้กับห้องสมุดหากผู้พัฒนาห้องสมุดยังไม่ได้อัปเดตห้องสมุดของพวกเขา?


นี่น่าจะเป็นทางออกที่ดีสำหรับตอนนี้ - galloway.me.uk/2012/09/hacking-up-an-armv7s-library
Rajavanya Subramaniyan

คำตอบ:


418

หากคุณต้องการลบการสนับสนุนสถาปัตยกรรมใด ๆ เช่นARMv7-sในกรณีของคุณให้ใช้เมนูProject -> Build Settings -> ลบสถาปัตยกรรมออกจาก "สถาปัตยกรรมที่ถูกต้อง"

คุณสามารถใช้สิ่งนี้เป็นวิธีการแก้ปัญหาชั่วคราวจนกว่าห้องสมุดได้รับการปรับปรุง คุณต้องลบสถาปัตยกรรมออกจากโครงการหลักของคุณไม่ใช่จากไลบรารี

อีกทางหนึ่งคุณสามารถตั้งค่าสถานะสำหรับ "Build Active Architecture เท่านั้น" เป็น "ใช่" ปล่อยให้การกำหนดค่ารุ่น "สร้างเฉพาะสถาปัตยกรรมที่ใช้งานอยู่" เป็นไม่เพียงเพื่อให้คุณได้รับการแจ้งเตือนก่อนที่จะปล่อยว่าคุณควรอัพเกรดห้องสมุดบุคคลที่สามใด ๆ ที่คุณกำลังใช้


11
คุณไม่ต้องคอมไพล์ไลบรารีอีกครั้ง คุณสามารถลบการตั้งค่าสถานะนี้จากโครงการที่ใช้ไลบรารี
นิโคลัส

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

2
เฟรมเวิร์ก Dropbox ได้รับการอัปเดตสำหรับปัญหานี้แล้วโปรดดูforums.dropbox.com/topic.php?id=90014
railwayparade

6
การลบ armv7s ออกจากรายการสถาปัตยกรรมที่ถูกต้องใช้งานได้สำหรับฉัน แต่ก็เอามันออกจากสถาปัตยกรรม อย่างไรก็ตามในทั้งสองกรณีฉันจะได้รับNo architectures to compile for (ARCHS=i386, VALID_ARCHS=armv7).จากตัวเชื่อมโยงที่ฉันสามารถแก้ไขได้โดยการเพิ่มi386ลงในรายการสถาปัตยกรรมที่ถูกต้องเท่านั้น
levigroker

6
ไม่ armv7s เป็นชุดคำสั่งของตัวประมวลผล A6 ที่ใช้ใน iPhone 5 เนื่องจาก A6 เข้ากันได้ย้อนหลังจึงยังคงเรียกใช้ชุดคำสั่ง armv7
นิโคลัส

191

ฉันเพียงแค่สลับ "สร้างสถาปัตยกรรมที่ใช้งานเท่านั้น" ถึง "ใช่" ในการตั้งค่าการสร้างเป้าหมายและมันก็ตอนนี้!


1
@ Blasco73 คุณรู้หรือไม่ว่าคุณยอดเยี่ยม? คุณควร. ไปนี่สิท่านเยี่ยมมาก!
thandasoru

15
นี่จะเป็นวิธีแก้ปัญหาที่ดีได้อย่างไร มันเอาข้อผิดพลาด แต่คุณจะได้รับการสร้างสำหรับซุ้มปัจจุบันไม่ได้ทั้งหมดในตลาด ...
esbenr


13

ฉันเพิ่งโพสต์การแก้ไขที่นี่ซึ่งจะนำไปใช้ในกรณีนี้ - โดยทั่วไปคุณทำ hex ค้นหาและแทนที่ในไลบรารีภายนอกของคุณเพื่อให้คิดว่าเป็นรหัส ARMv7 คุณควรจะสามารถlipoแบ่งมันออกเป็น 3 ไลบรารีแบบคงที่ทำซ้ำ / แก้ไข ARMv7 จากนั้นใช้lipoอีกครั้งเพื่อรวบรวมไลบรารีใหม่สำหรับสถาปัตยกรรมทั้ง 4 รายการ


5

Flurry Support สำหรับ iPhone 5 (ARMv7s) ดังที่ฉันได้กล่าวถึงในโพสต์เมื่อวานนี้ Flurry เริ่มทำงานกับ iOS SDK เวอร์ชันหนึ่งเพื่อสนับสนุนโปรเซสเซอร์ ARMv7s ใน iPhone 5 ใหม่ทันทีหลังจากประกาศในวันพุธ

ฉันยินดีที่จะบอกคุณว่างานเสร็จและ SDK พร้อมใช้งานบนไซต์แล้ว


4

ใช้เมนูโครงการ -> สร้างการตั้งค่า ->

จากนั้นลบ armv7s ออกจาก "สถาปัตยกรรมที่ถูกต้อง" หากเลือกมาตรฐานแล้วให้ลบสิ่งนั้นและเพิ่ม armv7


1

ในกรณีนี้เกิดขึ้นกับใครบางคน ฉันสร้างห้องสมุดของตัวเองเพื่อใช้กับรหัสบุคคลที่สาม ในขณะที่ฉันกำลังสร้างมันเพื่อส่งมอบฉันบังเอิญทิ้ง iPhone 4S ของฉันไว้และ Xcode จึงสร้างห้องสมุดของฉันสำหรับสถาปัตยกรรมที่เสียบเท่านั้นแทนที่จะทำตามการตั้งค่าโครงการ ลบอุปกรณ์ที่เชื่อมต่อและสร้างไลบรารีเชื่อมโยงใหม่และคุณควรจะใช้งานได้

หวังว่ามันจะช่วย


0

ในกรณีของฉันฉันกำลังเชื่อมโยงไปยังห้องสมุดบุคคลที่สามซึ่งค่อนข้างเก่า (พัฒนาสำหรับ iOS 6 บน XCode 5 / iOS 7) ดังนั้นฉันต้องอัปเดตห้องสมุดบุคคลที่สามทำความสะอาดและสร้างและตอนนี้มันก็สร้างสำเร็จแล้ว

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