ในวิดีโอนี้ เราจะพูดถึงข้อผิดพลาดของตัวเชื่อมโยงและสาเหตุที่เกิดขึ้นได้
ข้อผิดพลาดของตัวเชื่อมโยงเกิดขึ้นเมื่อตัวเชื่อมโยงพยายามรวมชิ้นส่วนทั้งหมดของโปรแกรมเข้าด้วยกันเพื่อสร้างไฟล์ปฏิบัติการ
และชิ้นส่วนหายไปอย่างน้อยหนึ่งชิ้น
โดยทั่วไป สิ่งนี้สามารถเกิดขึ้นได้เมื่อตัวเชื่อมโยงไม่พบไฟล์วัตถุหรือไลบรารี
การแก้ไขข้อผิดพลาดของตัวเชื่อมโยงอาจยุ่งยาก
บางครั้งก็เป็นเรื่องของการทำให้เส้นทางถูกต้องเพื่อให้ตัวเชื่อมโยงรู้ว่าชิ้นส่วนที่ขาดหายไปอยู่ที่ไหน
ไปที่รหัสแสงและเราจะบังคับให้โปรแกรมมีข้อผิดพลาดของตัวเชื่อมโยงเพื่อให้คุณเห็นว่าข้อความแสดงข้อผิดพลาดมีลักษณะอย่างไร
โค้ดตัวอย่างที่นี่ โปรดอย่าสนใจไวยากรณ์
นี่คือรหัส C บวกบวกจริง ๆ แต่ก็ยังเกี่ยวข้องกับข้อผิดพลาดของตัวเชื่อมโยง
ไม่ต้องกังวลกับกระแสไอโอ
ไม่ต้องกังวลกับ stdcout
แนวคิดหลักที่นี่คือข้อผิดพลาดของลิงก์จะเหมือนกันใน C และ C plus plus
และตัวอย่างการเข้ารหัสที่นี่เป็นเพียงการพยายามแสดงข้อผิดพลาดของตัวเชื่อมโยงอีกครั้ง
ดังนั้นฉันจึงเข้าใจโค้ดและฉันได้สร้างโปรเจ็กต์ชื่อ Linker Error ตามเทมเพลตที่เราใช้
ทั้งหมดที่ฉันมีคือเมน cpp ที่ระบุว่า Hello world
ตอนนี้เราจะบังคับข้อผิดพลาดของตัวเชื่อมโยงที่นี่
นี่ไม่ใช่สิ่งที่คุณต้องการทำตามปกติ แต่ฉันต้องการแสดงให้คุณเห็นว่าข้อผิดพลาดมีลักษณะอย่างไร
ที่ผมจะพูดก็คือ ผมจะพูดว่า extern int c หรือสมมุติว่า X แล้วผมจะอธิบายทั้งหมดนี้ให้คุณฟังในอีกไม่กี่วินาที
แล้วในส่วนของตัวหลัก ผมอยากลองใช้ X ตรงนั้นดู
มันเป็นจำนวนเต็มและสมมุติว่าฉันต้องการพิมพ์ออกมา
ฉันแค่ต้องการพิมพ์ X ออกมา ง่ายๆ แบบนั้น
ฉันจะบันทึกสิ่งนี้
ตอนนี้ คุณจะเห็นว่าถ้าฉันคอมไพล์โปรแกรมนี้ คุณจะเห็นว่าจะเกิดอะไรขึ้น
ฉันจะคลิกขวาที่คอมไพล์
ฉันได้รับคอมไพล์ที่สะอาด
ไม่มีอะไรผิดปกติกับโปรแกรม แต่เมื่อฉันพยายามสร้างและเรียกใช้
คุณอาจเห็นข้อผิดพลาดของตัวเชื่อมโยง
นี่คือข้อผิดพลาดของตัวเชื่อมโยงแบบคลาสสิก
การอ้างอิงที่ไม่ได้กำหนดถึงบางสิ่ง
ในกรณีนี้มันจะเป็น x
นอกจากนี้ คุณจะสังเกตเห็นว่าตัวเชื่อมโยงกลับมาที่นี่
LD ส่งคืนค่าหนึ่งซึ่งเป็นสถานะการออก
มีบางอย่างผิดปกติกับลิงก์
เห็นได้ชัดว่าคอมไพเลอร์ใช้ได้ดีเพราะเราไม่มีข้อผิดพลาดของคอมไพเลอร์
เราทำเช่นนั้นอีกครั้ง
มีการรวบรวม
ไม่มีข้อผิดพลาด ไม่มีการเตือน
ให้ฉันอธิบายให้คุณฟังว่าเกิดอะไรขึ้นที่นี่
ให้ฉันคว้าสไตลัสของฉันที่นี่อย่างรวดเร็ว
และสิ่งที่เกิดขึ้นที่นี่คือฉันมีไฟล์ CPP หลักของฉันที่นี่ และมันจะถูกคอมไพล์เป็น main dot zer
หรือ main dot object
ที่นี่เรามีการอ้างอิงถึง EXE
คุณสามารถเห็นได้ที่นั่น
ดังนั้นที่นี่ฉันมีการอ้างอิงถึง exe ซึ่งฉันจะใช้
ตอนนี้เรายังมีไลบรารี O stream ของเราด้วย ดังนั้นผู้เชื่อมโยงจำเป็นต้องคว้าไลบรารีเหล่านั้น และฉันจะพิมพ์ io stream ที่นี่เพื่อที่คุณจะได้รู้ว่าฉันกำลังพูดถึงอะไร
ตัวเชื่อมโยงต้องรวมทั้งสองเข้าด้วยกันเพื่อสร้าง exe หลักของฉัน
หรือในกรณีนี้ฉันเชื่อว่ามันจะเป็นข้อผิดพลาดของ linker exe
แต่คุณรู้ว่าฉันหมายถึงอะไร
ดังนั้นการคอมไพล์จึงดี
เราได้สร้างไฟล์วัตถุของเรา
ห้องสมุดนี้มีอยู่
ปัญหาคือฉันได้บอกคอมไพเลอร์ที่นี่ว่า x นี้ไม่ได้อยู่ในตัวฉัน
มันอยู่ที่อื่น
มันถูกกำหนดโดยคนอื่น
เห็นได้ชัดว่ามันไม่ได้ถูกกำหนดโดยคนอื่นเพราะมันบังคับปัญหาที่นี่
ตอนนี้ตัวเชื่อมโยงต้องแก้ X ว่า โอเค ฉันจะเอาค่านั้นไปพิมพ์ได้ที่ไหน
เพราะนั่นคือสิ่งที่คุณขอให้ฉันทำที่นี่ใช่ไหม?
ฉันต้องการให้มันพิมพ์ค่า x
x อยู่ที่ไหน
มันหาไม่เจอ
นั่นคือข้อผิดพลาดของตัวเชื่อมโยง
นั่นคือสิ่งที่เกิดขึ้น
และให้ฉันสร้างสิ่งนี้อีกครั้งเพื่อให้คุณเห็นข้อความแสดงข้อผิดพลาดอีกครั้ง
มันสร้างและเรียกใช้มัน
และมีข้อความแสดงข้อผิดพลาด
มันกำลังพูดถึงการอ้างอิงที่ไม่ได้กำหนดถึง X
คุณสามารถดูได้ว่าเกิดอะไรขึ้น
มันหา X ไม่เจอ
ตอนนี้ นี่ไม่ใช่ข้อผิดพลาดของคอมไพเลอร์
นี่คือข้อผิดพลาดของตัวเชื่อมโยง
นั่นเป็นสิ่งสำคัญมากที่จะต้องเข้าใจ
ข้อผิดพลาดของตัวเชื่อมโยงนั้นแก้ไขได้ยาก
หลายครั้งที่ไฟล์ที่คุณต้องการเชื่อมโยงหายไป
พวกเขาอยู่ในที่ที่ไม่ถูกต้อง
คุณไม่ต้องกังวลเกี่ยวกับการใช้โค้ดไลท์ในหลักสูตรนี้ เราจะทำทุกอย่างด้วยตัวเอง
แต่ถ้าคุณใช้ไลบรารีจากบุคคลที่สาม นี่คือสิ่งที่เราจะพูดถึงในหลักสูตรขั้นกลางหรือขั้นสูง
แต่ฉันแค่อยากจะแสดงให้คุณเห็นข้อผิดพลาดของตัวเชื่อมโยงในกรณีที่คุณพบข้อผิดพลาด ให้โพสต์ในฟอรัมและเราจะทำงานร่วมกัน