สัญลักษณ์ที่ไม่ได้กำหนดสำหรับสถาปัตยกรรม armv7


307

ปัญหานี้ทำให้ฉันคลั่งและฉันไม่สามารถหาวิธีแก้ไขได้ ...

    Undefined symbols for architecture armv7:
  "_deflateEnd", referenced from:
      -[ASIDataCompressor closeStream] in ASIDataCompressor.o
  "_OBJC_CLASS_$_ASIDataDecompressor", referenced from:
      objc-class-ref in ASIHTTPRequest.o
  "_deflate", referenced from:
      -[ASIDataCompressor compressBytes:length:error:shouldFinish:] in ASIDataCompressor.o
  "_deflateInit2_", referenced from:
      -[ASIDataCompressor setupStream] in ASIDataCompressor.o
ld: symbol(s) not found for architecture armv7
collect2: ld returned 1 exit status
Command /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc-4.2 failed with exit code 1

ฉันคิดว่ามันเกี่ยวข้องกับ:

ld: symbol(s) not found for architecture armv7

แต่ฉันได้เพิ่ม: libz.1.2.3.dylibและมันไม่ได้ช่วยใครมีความคิดอะไรบ้าง


ความเป็นไปได้อื่นที่ไม่ได้กล่าวถึงในคำตอบใด ๆ ที่มีอยู่ก็คือคุณอาจใช้เครื่องหมาย-ObjCตัวเชื่อมโยงอื่นและ Obj-C จากไลบรารีคงที่ภายนอกที่คุณกำลังใช้ซึ่งไม่ควรมองเห็นได้ (เช่นจาก Parse's) ดูคำตอบของฉันหากเป็นกรณีนี้: stackoverflow.com/a/26151208/901641
ArtOfWarfare

2
ตามกฎของหัวแม่มือบางครั้ง XCode ให้ข้อผิดพลาดเช่น Match-O และสัญลักษณ์ที่ไม่พบสำหรับสถาปัตยกรรม i386 (หรืออื่น ๆ ) เมื่อไฟล์ไม่ถูกเพิ่มลงในโครงการ Yo สามารถคลิกขวาที่โฟลเดอร์โครงการและทำ "เพิ่มไฟล์ไปที่ <project>"
Fabricio PH

คุณสามารถเห็นสัญลักษณ์รูปธรรมที่สร้างขึ้นโดยใช้เครื่องมือ nm เทอร์มินัลไปยังพา ธ ของไฟล์. o และรันnm -gบนไฟล์ที่เรียกสัญลักษณ์และอันที่ควรมีสัญลักษณ์และคุณควรดูว่ามันตรงกันหรือไม่ซึ่งสามารถให้เบาะแสสำหรับข้อผิดพลาด nm -g file.o คุณสามารถตรวจสอบสัญลักษณ์ C ++ ที่ห้อยอยู่กับสิ่งนี้: nm -gC file.o
james_alvarez

ใครบางคนที่นี่โปรดช่วยฉันได้ไหม ฉันได้รับข้อผิดพลาดด้านล่าง แต่ไม่มีวิธีการใดที่ได้ผลสำหรับฉัน ฉันใช้เวลาหลายวันกับการตั้งค่าที่เป็นไปได้ทั้งหมด Undefined symbols for architecture armv7: "YGConfig::YGConfig(int (*)(YGConfig*, YGNode*, YGLogLevel, char const*, void*))", referenced from: _YGConfigNew in libyoga.a(Yoga.o) ld: symbol(s) not found for architecture armv7 clang: error: linker command failed with exit code 1 (use -v to see invocation)
ปีศาจแดง

คำตอบ:


506

สาเหตุที่พบบ่อย

สาเหตุทั่วไปสำหรับ "สัญลักษณ์ที่ไม่ได้กำหนดสำหรับสถาปัตยกรรม armv7" คือ:

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

    • เพิ่มห้องสมุดที่ถูกต้องในส่วนของLink Binary With LibrariesBuild Phases

    • หากคุณต้องการที่จะเพิ่มนอกห้องสมุดเส้นทางการค้นหาเริ่มต้นที่คุณสามารถรวมถึงเส้นทางในLibrary Search Pathsคุ้มค่าในการตั้งค่าการสร้างและเพิ่ม
      -l{library_name_without_lib_and_suffix}(เช่น. สำหรับการใช้งาน libz.a -lz) เพื่อส่วนหนึ่งของOther Linker FlagsBuild Settings

  2. คุณคัดลอกไฟล์ในโครงการของคุณ แต่ลืมที่จะตรวจสอบเป้าหมายในการเพิ่มไฟล์ไปยัง วิธีแก้ไข:

    • เปิดBuild Phasesสำหรับเป้าหมายที่ถูกต้องขยายCompile Sourcesและเพิ่ม.mไฟล์ที่หายไป หากนี่คือปัญหาของคุณโปรดตอบคำถามของ Cortex ด้านล่างด้วย

  3. คุณรวมไลบรารีแบบคงที่ที่สร้างขึ้นสำหรับสถาปัตยกรรมอื่นเช่น i386 เครื่องมือจำลองบนเครื่องโฮสต์ของคุณ วิธีแก้ไข:

    • หากคุณมีไฟล์ไลบรารีหลายไฟล์จากผู้จำหน่ายห้องสมุดของคุณเพื่อรวมไว้ในโครงการคุณต้องรวมไฟล์สำหรับจำลอง (i386) และไฟล์สำหรับอุปกรณ์ (armv7 เป็นต้น)

    • คุณสามารถสร้างไลบรารี่แบบสแตติกที่มีทั้งสถาปัตยกรรม



คำตอบเดิม:

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

/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk/usr/lib

ฉันขอแนะนำให้นำการอ้างอิงออกแล้วเพิ่มกลับเข้าไปในส่วน Link Binary With Libraries อีกครั้ง Build Phases ของเป้าหมายของคุณ


4
อาจเป็นเพราะคุณต้องเพิ่มคำว่า "-licucore" ในการตั้งค่าโครงการ / Other Linker Flags มันถูกเพิ่มโดยอัตโนมัติสำหรับการสร้างข้อบกพร่องของฉัน แต่ไม่ใช่รุ่นที่วางจำหน่ายดังนั้นจะไม่รวบรวม
JulianB

4
ฉันมีปัญหาเดียวกัน ไม่ได้อ่านบันทึกการติดตั้งอย่างถูกต้องดังนั้นจึงไม่ได้สังเกตเห็นว่าเวอร์ชันใหม่ของบั๊กที่ต้องการไบนารี libz เพิ่มในขั้นตอนการสร้าง
Max MacLeod

2
คุณแน่ใจหรือไม่ว่าคุณได้รวมส่วน @implementation ไว้ในไฟล์. m ที่เกี่ยวข้องสำหรับคลาสทั้งหมดที่คุณประกาศไว้ในไฟล์ส่วนหัวของคุณ
slcott

7
ฉันแค่ต้องการเพิ่มฉันคิดว่ามันเป็นความเคารพของคุณจริงๆที่จะอ้างอิงคำตอบของคำถามนี้อีกครั้งและบอกให้เราลงคะแนนถ้ามันช่วยได้
Andrew

ขอบคุณที่ช่วยเหลือ! :) สำหรับผมช่วยพิมพ์อย่างชัดเจนในอื่น ๆ ส่วน Linker -framework <FrameWorkName>ธง: ฉันมีปัญหากับ XCTest -framework XCTestดังนั้นผมจึงมีการเพิ่ม ขอบคุณ! :)
piotr_ch

198

ฉันมีปัญหาที่คล้ายกันเมื่อคืนและปัญหาเกี่ยวข้องกับความจริงที่ว่าฉันได้ลากคลาสจาก Finder ไปยังโครงการของฉันใน Xcode

วิธีแก้ไขคือไปที่แท็บ Build Phases จากนั้นคลิก Compile Sources และตรวจสอบให้แน่ใจว่าคุณลากคลาสไปที่รายการ


6
ฉันหวังว่าฉันจะรู้ว่านี่เป็นคำตอบที่ฉันค้นหาก่อนหน้านี้ - หรือคุณสามารถตรวจสอบ 'เพิ่มไปยังเป้าหมาย' เมื่อคัดลอกคลาส
ต. Markle

1
โอ้โหดีใจมากที่การแก้ไขเป็นเรื่องง่าย! เพื่อความชัดเจนหากคุณเพิ่มคลาสโดยการลากจากตัวค้นหาไปยังโครงการของคุณ XCode จะไม่เพิ่มพวกเขาในรายการเฟสการสร้างของคุณอย่างชัดเจน ฉันเพิ่งกดปุ่ม "+" ใน "แหล่งรวบรวม" ภายใต้ขั้นตอนการสร้างเพิ่มไฟล์ที่กระทำผิดทั้งหมดและมันจะรวบรวมทันที
Amos

1
ว้าว. แอปเปิ้ลจริงๆจำเป็นต้องพิจารณาข้อความผิดพลาดของพวกเขา
devios1

2
อีกวิธีในการแก้ไขคือเลือกไฟล์ที่ถูกกล่าวว่าหายไป และเปิดแถบเลื่อน "Utilities" (นั่นคือขวาสุด) และเลือก "ตัวตรวจสอบไฟล์" จากนั้นตรวจสอบให้แน่ใจว่ามีการตรวจสอบในโครงการภายใต้ "Target Membership" ฉันใช้ Xcode 4.6.2
zingle-dingle

1
ฉันไม่รู้ว่าไฟล์ใดหายไปดังนั้นฉันจึงแสดง Build Phases ในเครื่องมือแก้ไขผู้ช่วย (มุมมองการแก้ไขที่สอง) ฉันเปิดไฟล์ที่ละเมิดในมุมมองแก้ไขด้านซ้ายและตรวจสอบว่าไฟล์ที่อิมพอร์ตแต่ละไฟล์มีอยู่ใน Build Phases ฉันเพิ่มสิ่งที่ไม่ได้แก้ไขแล้ว
Dan Sandland

38

ฉันมีปัญหาที่คล้ายกันและฉันต้องตรวจสอบ "Build Active Architecture Only" ในแต่ละการกำหนดค่าโครงการ (Debug, Release and Deployment) และในการตั้งค่า Build ของเป้าหมาย


3
เคล็ดลับสำหรับฉันก็ทำเช่นกัน จำเป็นเพียงแค่ในโครงการหลักว่า
Kirualex

4
ฉันพบปัญหาเดียวกัน การBuild Active Architecture Onlyตั้งค่าต่างจากPodsโครงการของฉัน ในขั้นตอนการเชื่อมโยงมันล้มเหลว
AechoLiu

21

สาเหตุที่เป็นไปได้อีกประการหนึ่งของข้อผิดพลาด "ลิงเกอร์ไม่ได้กำหนด" ตัวเชื่อมโยงกำลังพยายามเรียกใช้ฟังก์ชัน C จากไฟล์. mm ในกรณีนี้คุณจะต้องใช้ extern "C" {... } เมื่อคุณนำเข้าไฟล์ส่วนหัว

ข้อผิดพลาด Linker เรียก C-Function จาก Objective-C ++


14

ฉันมีปัญหาที่คล้ายกันกับที่ ชื่อคลาสหลัง _OBJC_CLASS _ $ _ เป็นชั้นเรียนของฉันจริงๆ สาเหตุที่ฉันไม่ได้ทำเครื่องหมาย "เพิ่มลงในเป้าหมาย" เมื่อฉันลากไฟล์ซอร์สโค้ดไปยังรายการการนำทาง

ทางออกของฉันคือ:

  1. ลบคลาสออกจากรายการการนำทางและเลือก "ลบการอ้างอิงเท่านั้น"

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


เพียงเพิ่ม: แม้ว่านี่ไม่ใช่สาเหตุทั่วไปของข้อผิดพลาด แต่ฉันแค่คำตอบของคุณ (ไม่ทำเครื่องหมายที่ช่อง) เกิดขึ้นกับฉันตอนนี้
Adam

8

โดยทั่วไปจะมีนามแฝงที่ไม่มีตัวระบุเวอร์ชันที่เชื่อมโยงกับเวอร์ชันปัจจุบันในกรณีนี้ libz.dylib เชื่อมโยงกับ libz.1.2.5.dylib ใช้นามแฝงฐานแทนรุ่นที่มีเวอร์ชัน


5

ภายใต้เป้าหมาย -> การตั้งค่าการสร้าง -> ภาษาคอมไพเลอร์ LLVM ของ Apple: การตั้งค่า 'ภาษา C ++ ภาษาถิ่น' และ 'ห้องสมุดมาตรฐาน C ++' เป็นค่าเริ่มต้นของคอมไพเลอร์ช่วยแก้ปัญหาได้


5

ฉันเพิ่งเพิ่ม libz.1.2.5.dylib ไปยังโปรเจ็กต์ของฉันและมันทำงานได้อย่างมีเสน่ห์

ขั้นตอน -

  1. ไปที่ Build Phases
  2. เชื่อมโยงไบนารีกับไลบรารี่ - ใช้ปุ่ม '+' เพื่อเลือกเฟรมเวิร์กและไลบรารี่ที่ต้องการเพิ่ม
  3. เลือก libz.1.2.5.dylib จากรายการ
  4. สร้างและเรียกใช้

5

ฉันมีปัญหาที่คล้ายกันและเห็นข้อผิดพลาดที่เกี่ยวข้องกับ "std ::"

ฉันเปลี่ยนการตั้งค่า Build -> Apple LVM 5.0 - ภาษา C ++ -> ไลบรารีมาตรฐาน C ++

จาก libc ++ (LLVM C ++ ไลบรารีมาตรฐานพร้อมการสนับสนุน C ++ 11) ถึง libstdc ++ (ไลบรารีมาตรฐาน GNU C ++)


5

ฉันมีปัญหาเดียวกันเมื่อฉันใช้ไลบรารี admob ฉันแก้ไขมันเพื่อเปลี่ยน "สถาปัตยกรรม" เป็น "สถาปัตยกรรมมาตรฐาน armv7, armv7s" โดยไม่รวม 64 บิต การตั้งค่าการสร้าง


4

ฉันมี @interfaces หลายรายการในไฟล์. h และยังไม่ได้รวมคำสั่ง @implementation ที่เกี่ยวข้องทั้งหมด ตรวจสอบให้แน่ใจว่าพวกเขามีความสมดุล


4

หากคุณมีการตั้งค่าสถานะ-ObjCภายใต้เป้าหมาย> การตั้งค่าการสร้าง> การเชื่อมโยงธงอื่น ๆ และคุณได้รับปัญหานี้ให้ลองลบออก หากคุณเพิ่มอย่างตั้งใจเพราะคุณจำเป็นต้องโหลดรหัส Obj-C บางส่วนจากห้องสมุดแบบคงที่ซึ่งปกติจะไม่สามารถโหลดได้มิฉะนั้น IE ประเภท Obj-C คุณควรใช้-force_load <path>แทน-ObjCแทน

<path>ควรสัมพันธ์กับไดเรกทอรีโครงการ Xcode ของคุณ IE หากโครงสร้างไดเรกทอรีของคุณเป็นดังนี้:

iOSProject
  + iOSAPI.framework
      + iOSAPI
  + iOSAPI.xcodeproj

จากนั้นคุณควรตั้งค่าสถานะนี้เป็นOther Linker Flags:

-force_load iOSAPI.framework/iOSAPI

หากคุณต้องการรวมหลายไลบรารีเช่นนั้นคุณควรรวม-force_loadบรรทัดแยกสำหรับแต่ละไลบรารี

-force_load iOSAPI.framework/iOSAPI
-force_load another.framework/another

4

นี่คือวิธีที่ฉันได้รับปัญหานี้:

ฉันเพิ่ม. h, .m และ NIB จากโปรเจ็กต์อื่นโดยการลากเข้าสู่เนวิเกเตอร์โครงการของฉัน Xcode ไม่ได้เพิ่มพวกเขาไปยังขั้นตอนการสร้างอย่างถูกต้อง

ตรวจสอบคำตอบของฉันเพราะฉันมีปัญหาที่คล้ายกันซึ่งฉันสามารถแก้ไขได้โดยทำบางขั้นตอน


3

หากคุณกำลังจัดการกับการอัพเกรด iOS5 ฉันพบว่าสำหรับการรวบรวมโครงการที่เขียนไปยังเป้าหมาย 4.3 ฉันสามารถเปลี่ยนชื่อ libz.1.2.3.dynlib ใน Project Navigator เป็น libz.1.2.5.dynlib และคอมไพล์ได้

โฟลเดอร์ iPhoneOS50SDK / usr / lib ของฉันไม่มี libz.1.2.3.dynlib - ไม่ทราบว่าเป็นของรุ่นเบต้าหรือเป็นรุ่นอัพเกรดตามธรรมชาติ


3

ไปที่โครงการของคุณคลิกที่สร้างเฟสรวบรวมแหล่งเพิ่ม GameCenterManager.m ลงในรายการ


3

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

เลือกคลาสใน Project Navigator (แถบด้านข้างขวา) เปิดยูทิลิตี้ด้านข้าง (แถบด้านข้างขวา) จากยูทิลิตี้เลือก File Inspector (ไฟล์เช่นไอคอน) ภายใต้แท็บ Target Membership เลือกเป้าหมายของคุณ นี่คือทั้งหมดเพื่อหลีกเลี่ยงการ "ลบการอ้างอิง" และเพิ่มอีกครั้งด้วยการทำเครื่องหมาย "เพิ่มในเป้าหมาย" เคล็ดลับ

ดังนั้น: เลือก Class -> Utilities (File Inspector) -> Target Membership -> ทำเครื่องหมายเป้าหมายที่คุณต้องการ


2

ฉันไม่พบคำแนะนำนี้ที่นี่ดังนั้นมันจะไปได้: หากโครงการของคุณมีมากกว่าหนึ่งเป้าหมาย (เช่นหนึ่งสำหรับ OSX และอีกหนึ่งสำหรับ iOS) คุณต้องเชื่อมโยงไลบรารีที่เกี่ยวข้องสำหรับแต่ละเป้าหมาย .. เช่นในกรณีของฉัน จำเป็นต้องใช้ AudioToolbox .. ฉันต้องเพิ่มหนึ่งครั้งสำหรับ OSX และอีกครั้งสำหรับ iOS (ภายใต้โฟลเดอร์frameworksคุณต้องมีซ้ำของแต่ละไลบรารีสำหรับแต่ละเป้าหมาย .. หากคุณเห็นเพียงหนึ่ง .. นั่นคือธงสีแดง)


คำตอบนี้ช่วยฉัน อย่างไรก็ตามสถานการณ์ของฉันตรงไปตรงมามากขึ้น ... ฉันลืมเพิ่มเฟรมเวิร์กที่โค้ดเบสของฉันอ้างถึง ในกรณีของฉันฉันไม่สามารถโหลด AVFoundation.framework
จอห์น Erck

ใช่ฉันลืมเพิ่มกรอบภายใต้เฟส "เชื่อมโยงไบนารีกับไลบรารี"
Max

2

ฉันประสบปัญหากับห้องสมุด PJSIP

พยายามต่อไปนี้ในตัวเชื่อมโยงอื่น ๆ ธงในโครงการและสามารถแก้ไขข้อผิดพลาด: -framework Foundation -framework UIKit

ดังกล่าวข้างต้นธงลิงเกอร์ที่ใช้ในโครงการ Siphone กว่า GitHub การตั้งค่าเหล่านี้จะช่วยคุณแก้ไขปัญหาที่เกี่ยวข้องกับการเชื่อมโยงของไลบรารี C ++


ฉันมีปัญหาเดียวกันกับบรรณารักษ์ PJSIP คุณช่วยอธิบายรายละเอียดวิธีแก้ปัญหาได้ไหม
Rajat Jain

ตั้งค่าต่อไปนี้ในธงลิงเกอร์อื่น ๆ ของการตั้งค่าการสร้างโครงการ: -framework Foundation -framework UIKit
Adeesh Jain

ข้อความแสดงข้อผิดพลาด: ละเว้นไฟล์ /Users/user/Downloads/pjproject-2.7.2/pjsip-apps/src/pjsua/ios/libyuv.a ไฟล์ถูกสร้างขึ้นเพื่อการเก็บถาวรซึ่งไม่ได้เชื่อมโยงกับสถาปัตยกรรม (i386): / ผู้ใช้ /user/Downloads/pjproject-2.7.2/pjsip-apps/src/pjsua/ios/libyuv.a สัญลักษณ์ที่ไม่ได้กำหนดสำหรับสถาปัตยกรรม i386: "_pjsip_register_method" อ้างอิงจาก:
Rajat Jain

ดูเหมือนว่าคุณกำลังพยายามเรียกใช้แอปใน Simulator และ libyuv.a ไม่ได้สร้างขึ้นสำหรับสถาปัตยกรรมจำลอง i386 ลองเรียกใช้แอปบนอุปกรณ์โดยตรง
Adeesh Jain

ฉันต้องการรวม Pjsip ใน Swift ฉันพยายามสร้างส่วนเชื่อมต่อ แต่ไม่ได้ผล คุณให้ความคิดกับฉันได้ไหม
Rajat Jain

1

ในที่สุดฉันก็พบว่ามันแก้ไขปัญหานี้ได้โดยเพิ่มกรอบงานที่ขาดไปที่เป้าหมาย -> สร้างเฟส -> เชื่อมโยงไบนารีกับห้องสมุด


1

ฉันเคยมีปัญหานี้ ฉันรู้ว่าในขณะที่เรียนฉันก็เขียนทับ.mmไฟล์ด้วย.hไฟล์ในโฟลเดอร์ปลายทาง

แก้ไขปัญหานั้นแก้ไขข้อผิดพลาด


1

ฉันได้รับสัญลักษณ์ 'ไม่ได้กำหนดสำหรับสถาปัตยกรรม armv7:' ข้อผิดพลาดเมื่อพยายามรวบรวมโครงการที่มีการตั้งค่าการสร้างเป้าหมายสำหรับ 'C ++ Standard Library' ตั้งค่าเป็น 'libc ++' (จำเป็นเนื่องจากโครงการใช้คุณสมบัติบางอย่างจาก C ++ 11) และ โครงการรวมโครงการย่อยที่มีการตั้งค่าเดียวกันเป็น 'libstdc ++' (หรือค่าเริ่มต้นของคอมไพเลอร์ตามที่เป็นอยู่ในปัจจุบัน)

การเปลี่ยนการตั้งค่า 'ไลบรารีมาตรฐาน C ++' ของโครงการย่อยเป็น libc ++ แก้ไข แต่หลังจากตั้งค่าเป้าหมายการปรับใช้ครั้งแรกสำหรับโครงการย่อยเป็น 5.0 หรือสูงกว่าเท่านั้น (5.0 เป็นสิ่งจำเป็นสำหรับ libc ++)


1

ฉันให้คำแนะนำเพิ่มเติมกับคุณซึ่งคุณสามารถตรวจสอบว่าข้อเสนอแนะทั่วไปอื่น ๆ ไม่ได้ช่วยอะไร

หากคุณเชื่อมโยงกับโครงการอื่น (libxxx.a) บางครั้งคุณอาจพบปัญหาแปลก ๆ ซึ่งคุณสามารถค้นหาสัญลักษณ์ด้วยเครื่องมือเช่น nm แต่พวกเขาก็ไม่สามารถหาสัญลักษณ์ใน ld จากนั้นคุณควรตรวจสอบว่าโครงการสองโครงการนั้นสร้างขึ้นในแฟล็กเดียวกันหรือไม่โครงการบางโครงการอาจมีผลต่อรูปแบบไบนารี

  1. ตรวจสอบคอมไพเลอร์ c ++
  2. ตรวจสอบการตั้งค่าภาษา c ++
  3. ตรวจสอบการสนับสนุนชนิดรันไทม์ c ++ (-frtti / -fnortti)
  4. ตรวจสอบว่ามี. a พร้อมชื่อเดียวกันปรากฏที่อื่นหรืออาจเป็นไฟล์ที่ต้องการในรายการลิงก์พา ธ ลบออก

1

ฉันมีปัญหานี้เมื่อฉันใช้ app บนiphone5sมันก็แก้ไขได้โดยการเพิ่มarm64การสถาปัตยกรรม


1

ผมมีปัญหาเหมือนกัน. ฉันลองทุกสิ่งจากรายการคำตอบมากมาย แต่ท้ายที่สุดปัญหาของฉันคือ: ฉันทำงานกับ openCV ดังนั้นฉันจึงต้องรวมรหัส C ++ ในรหัสของฉัน ในการทำเช่นนี้คุณควรเปลี่ยนไฟล์ที่ใช้ purpose-c และ C ++ เป็น. mm ฉันไม่ได้เปลี่ยนไฟล์หนึ่งไฟล์และไฟล์นี้ไม่มีการเชื่อมต่อกับรหัส C ++ แต่ฉันต้องเปลี่ยนมัน


1

ฉันมีปัญหานี้เมื่อติดตั้ง shareKit มันทำงานได้ในเครื่องจำลอง แต่ไม่ได้อยู่ในอุปกรณ์ ฉันลบ -all_load ออกจากOther Linker Flagและทุกอย่างทำงานได้ดีทั้งในอุปกรณ์จำลองและ iPhone


1

ในกรณีของฉันฉันจะเพิ่มกรอบงานที่ต้องใช้ Objective C ++ ฉันพบโพสต์นี้:

XCode .m กับ. mm

ที่อธิบายวิธีที่ main.m จำเป็นต้องเปลี่ยนชื่อเป็น main.mm เพื่อให้คลาส Objective-C ++ สามารถคอมไพล์ได้เช่นกัน

นั่นแก้ไขให้ฉัน


1

ฉันใช้เพื่อเผชิญกับปัญหานั้นเมื่อโมดูล (ไฟล์. m) ไม่ได้อยู่ในเป้าหมายที่ฉันทำงานด้วย


1

สำหรับฉันปัญหาคือว่าฉันลืมที่จะกำหนดค่าสำหรับค่าคงที่ของฉันใน. m (การใช้งาน)

file const kFooKey = @"Foo";

1

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


1

หากคุณกำลังสร้างจาก Unity3D 5 และใช้ปลั๊กอิน Prime31 และคุณได้รับข้อผิดพลาดนี้อาจเป็นเพราะ. dll ซ้ำ หากคุณดูคำเตือนของคุณในบรรณาธิการของ Unity หนึ่งในนั้นจะบอกคุณนี้และเตือนว่ามันอาจทำให้เกิดข้อผิดพลาดในการสร้าง หากต้องการดูว่าเป็นกรณีนี้หรือไม่ให้พิมพ์ P31 ในช่องค้นหาโครงการของคุณและควรจะปรากฏขึ้นมาหรืออาจจะมากกว่าหนึ่ง ของที่ซ้ำกันจะมี '1' ในตอนท้ายของชื่อไฟล์ อาจเกิดจากการอัปเดตปลั๊กอินในโปรแกรมแก้ไขผ่านทางร้านค้าหรือแท็บเมนู Prime31

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