ld.exe: ข้อผิดพลาด DWARF: ไม่พบข้อกำหนดตัวแปรที่ออฟเซ็ต 101cee

Aug 20 2020

ฉันได้รับผลลัพธ์จำนวนมากพร้อมข้อความต่อไปนี้ (แตกต่างจากที่อยู่เลขฐานสิบหกเท่านั้น):

ld.exe: DWARF error: could not find variable specification at offset 101cee

ความหมายของข้อผิดพลาดนี้โดยทั่วไปคืออะไร?

สิ่งนี้จะไม่เกิดขึ้นเมื่อคอมไพล์รุ่นสร้าง สร้างดีบักเท่านั้น

คำตอบ

3 Chameleon Aug 20 2020 at 18:24

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

ฉันรวบรวมไลบรารีเป็นไลบรารีแบบคงที่ แต่ไม่มี#defineคำสั่งที่ถูกต้องฟังก์ชันที่ส่งออกทั้งหมดจะได้รับ__declspec(dllexport)คำนำหน้า ดังนั้นชื่อของฟังก์ชั่นกลายเป็นfunction__imp_function

ดังนั้นมันจึงเป็นเพียงundefined reference to __imp_functionไฟล์.

แต่ทำไมถึงเข้ารหัสได้ขนาดนั้น? และเหตุใด release build จึงคอมไพล์ได้อย่างถูกต้อง?

ฉันเชื่อว่าสิ่งนี้เกิดขึ้นเนื่องจาก-fltoตัวเลือกที่เพิ่มประสิทธิภาพเวลาลิงก์และเก็บรหัสทั้งหมดของไลบรารีไว้ในไฟล์. a ดังนั้นไม่จำเป็นต้องมีการอ้างอิง (ไม่ล้มเหลว)