กลับไปหน้าบทความ

อ่าน 5 นาที

ตัวเชื่อม (คอมพิวเตอร์)

โปรแกรมเชื่อมโยง (linkerหรือlink editor)คือโปรแกรมคอมพิวเตอร์ที่รวม ไฟล์ สร้างซอฟต์แวร์ ระดับกลาง เช่นไฟล์ออบเจ็กต์และ ไฟล์ ไลบรารี เข้าเป็นไฟล์ ปฏิบัติการเดียวเช่น...

ตัวเชื่อม (คอมพิวเตอร์)

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

โปรแกรมเชื่อมโยง (linkerหรือlink editor)คือโปรแกรมคอมพิวเตอร์ที่รวม ไฟล์ สร้างซอฟต์แวร์ ระดับกลาง เช่นไฟล์ออบเจ็กต์และ ไฟล์ ไลบรารี เข้าเป็นไฟล์ ปฏิบัติการเดียวเช่น โปรแกรมหรือไลบรารี โดยทั่วไปแล้ว โปรแกรมเชื่อมโยงจะเป็นส่วนหนึ่งของชุดเครื่องมือ (toolchain)ที่รวมถึงคอมไพเลอร์และ/หรือแอสเซมเบลอร์ที่สร้างไฟล์ระดับกลางซึ่งโปรแกรมเชื่อมโยงจะประมวลผล โปรแกรมเชื่อมโยงอาจถูกรวมเข้ากับเครื่องมือ อื่นๆ ในชุดเครื่องมือ ทำให้ผู้ใช้ไม่ต้องโต้ตอบกับโปรแกรมเชื่อมโยงโดยตรง

เวอร์ชันที่ง่ายกว่าซึ่งเขียนเอาต์พุต ลงใน หน่วยความจำโดยตรงเรียกว่าตัวโหลดแม้ว่าการโหลดมักจะถือเป็นกระบวนการแยกต่างหากก็ตาม[ 1 ] [ 2 ]

ภาพรวม

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

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

โดยทั่วไป ไฟล์ออบเจ็กต์สามารถประกอบด้วยสัญลักษณ์ได้สามประเภท:

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

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

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

ตัวเชื่อมโยง (linker) ยังทำหน้าที่จัดเรียงอ็อบเจ็กต์ใน พื้นที่แอดเดรสของโปรแกรมด้วย ซึ่งอาจเกี่ยวข้องกับการย้าย ตำแหน่ง ของโค้ดที่กำหนดแอดเดรสฐาน เฉพาะ ไปยังแอดเดรสฐานอื่น เนื่องจากคอมไพเลอร์มักไม่ทราบว่าอ็อบเจ็กต์จะอยู่ที่ใด จึงมักกำหนดตำแหน่งฐานคงที่ (เช่นศูนย์ ) การย้ายตำแหน่งของโค้ดเครื่องอาจเกี่ยวข้องกับการกำหนดเป้าหมายใหม่สำหรับการกระโดดแบบสัมบูรณ์ การโหลด และการจัดเก็บ

ไฟล์ปฏิบัติการที่สร้างโดยลิงเกอร์อาจต้องผ่านกระบวนการย้ายตำแหน่งอีกครั้งเมื่อโหลดเข้าสู่หน่วยความจำในที่สุด (ก่อนการประมวลผล) โดยปกติแล้วกระบวนการนี้จะถูกละเว้นในฮาร์ดแวร์ที่มีหน่วยความจำเสมือน : แต่ละโปรแกรมจะถูกจัดไว้ในพื้นที่แอดเดรสของตัวเอง ดังนั้นจึงไม่มีข้อขัดแย้งแม้ว่าโปรแกรมทั้งหมดจะโหลดที่แอดเดรสฐานเดียวกันก็ตาม กระบวนการนี้อาจถูกละเว้นได้เช่นกันหากไฟล์ปฏิบัติการเป็นไฟล์ปฏิบัติการ ที่ไม่ขึ้นกับตำแหน่ง

นอกจากนี้ ในระบบปฏิบัติการบางระบบ โปรแกรมเดียวกันจะทำหน้าที่ทั้งการเชื่อมโยงและการโหลดโปรแกรม ( การเชื่อมโยงแบบไดนามิก )

การเชื่อมโยงแบบไดนามิก

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

วิธีการนี้มีข้อดีสองประการ:

  • ไลบรารีที่ใช้งานบ่อย (เช่น ไลบรารีระบบมาตรฐาน) จำเป็นต้องจัดเก็บไว้ในที่เดียว ไม่จำเป็นต้องคัดลอกไปไว้ในไฟล์ปฏิบัติการทุกไฟล์ ซึ่งจะช่วยประหยัดหน่วยความจำและพื้นที่ดิสก์ ที่มีจำกัด
  • หากพบข้อผิดพลาดในฟังก์ชันของไลบรารีโดยการเปลี่ยนไลบรารีใหม่ หรือประสิทธิภาพดีขึ้น โปรแกรมทั้งหมดที่ใช้งานฟังก์ชันนั้นแบบไดนามิกจะได้รับประโยชน์จากการแก้ไขหลังจากรีสตาร์ทโปรแกรม ส่วนโปรแกรมที่รวมฟังก์ชันนี้โดยการเชื่อมโยงแบบคงที่ จะต้องทำการเชื่อมโยงใหม่ก่อน

นอกจากนี้ยังมีข้อเสียอยู่บ้าง:

  • ใน แพลตฟอร์ม Windows รู้จักกัน ในชื่อ " DLL hell " ซึ่งหมายถึงไลบรารีที่อัปเดตแล้วแต่ไม่เข้ากัน จะทำให้ไฟล์ปฏิบัติการที่ขึ้นอยู่กับพฤติกรรมของไลบรารีเวอร์ชันก่อนหน้าทำงานผิดพลาด หากเวอร์ชันใหม่กว่านั้นไม่สามารถใช้งานร่วมกับเวอร์ชันก่อนหน้า ได้อย่างถูก ต้อง
  • โปรแกรมพร้อมกับไลบรารีที่ใช้ อาจได้รับการรับรอง (เช่น ในด้านความถูกต้อง ข้อกำหนดด้านเอกสาร หรือประสิทธิภาพ) ในฐานะแพ็กเกจ แต่จะไม่ได้รับการรับรองหากส่วนประกอบสามารถเปลี่ยนได้ (ซึ่งเป็นข้อโต้แย้งต่อการอัปเดตระบบปฏิบัติการอัตโนมัติในระบบที่สำคัญ ในทั้งสองกรณี ระบบปฏิบัติการและไลบรารีเป็นส่วนหนึ่งของ สภาพแวดล้อม ที่มีคุณสมบัติเหมาะสม )

สภาพแวดล้อม แบบปิดหรือเสมือนจริงอาจช่วยให้ผู้ดูแลระบบสามารถลดหรือแลกเปลี่ยนข้อดีและข้อเสียแต่ละข้อเหล่านี้ ได้ดียิ่งขึ้น

การเชื่อมโยงแบบคงที่

การเชื่อมโยงแบบคงที่ (Static linking) เกิดจากการที่ตัวเชื่อมโยง (linker) คัดลอกรูทีนไลบรารีทั้งหมดที่ใช้ในโปรแกรมลงในอิมเมจไฟล์ปฏิบัติการ วิธีนี้อาจใช้พื้นที่ดิสก์และหน่วยความจำมากกว่าการเชื่อมโยงแบบไดนามิก (Dynamic linking) แต่พกพาสะดวกกว่า เนื่องจากไม่จำเป็นต้องมีไลบรารีนั้นอยู่ในระบบที่โปรแกรมทำงาน การเชื่อมโยงแบบคงที่ยังช่วยป้องกัน "DLL hell" ด้วย เพราะแต่ละโปรแกรมจะมีเฉพาะรูทีนไลบรารีเวอร์ชันที่ต้องการเท่านั้น โดยไม่มีข้อขัดแย้งกับโปรแกรมอื่น โปรแกรมที่ใช้เพียงไม่กี่รูทีนจากไลบรารีไม่จำเป็นต้องติดตั้งไลบรารีทั้งหมด

การย้ายถิ่นฐาน

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

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

ตัวแก้ไขลิงก์

ในระบบปฏิบัติการ เมนเฟรม IBM System/360ถึงIBM Z เช่นOS/360 และรุ่นต่อๆ มาโปรแกรมประเภทนี้เรียกว่าตัวแก้ไขการเชื่อมโยง (linkage editor ) ตามชื่อที่บ่งบอกตัวแก้ไข การเชื่อมโยง มีความสามารถเพิ่มเติมในการอนุญาตให้เพิ่ม แทนที่ และ/หรือลบส่วนต่างๆ ของโปรแกรมได้ ระบบปฏิบัติการเช่น OS/360 มีรูปแบบสำหรับโมดูลโหลดที่สามารถเรียกใช้งานได้ ซึ่งมีข้อมูลเพิ่มเติมเกี่ยวกับส่วนประกอบต่างๆ ของโปรแกรม เพื่อให้สามารถแทนที่ส่วนต่างๆ ของโปรแกรม และอัปเดตส่วนอื่นๆ ของโปรแกรมได้ เพื่อให้สามารถแก้ไขที่อยู่ที่มีการย้ายตำแหน่งได้และข้อมูลอ้างอิงอื่นๆ โดยใช้ตัวแก้ไขการเชื่อมโยงเป็นส่วนหนึ่งของกระบวนการ

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

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

การแก้ไขการเชื่อมโยง ( ศัพท์เฉพาะ ของ IBM ) หรือการรวมหรือการรวบรวม ( ศัพท์เฉพาะ ของ ICL ) หมายถึง การกระทำ ของผู้แก้ไขการเชื่อมโยงหรือผู้รวมในการรวมชิ้นส่วนต่างๆ เข้าด้วยกันเป็นไบนารีที่สามารถย้ายตำแหน่งได้ ในขณะที่การโหลดและการย้ายตำแหน่งไปยังไบนารีสัมบูรณ์ที่ที่อยู่เป้าหมายโดยปกติถือเป็นขั้นตอนแยกต่างหาก[ 2 ]

สคริปต์ควบคุมตัวเชื่อมโยง

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

การนำไปใช้งานที่โดดเด่น

ยูนิซและระบบปฏิบัติการที่คล้ายยูนิซ

ในระบบ Unix และระบบที่คล้าย Unix ตัวเชื่อมโยงแบบคงที่มักจะถูกเรียกใช้ผ่านคำสั่งldซึ่งเป็นคำย่อของLoaderหรือLinkedDitorคำว่า "loader" ถูกใช้เพื่ออธิบายกระบวนการโหลดสัญลักษณ์ภายนอกจากโปรแกรมอื่นในระหว่างกระบวนการเชื่อมโยง[ 4 ] (คำศัพท์นี้ถูกใช้ในระบบปฏิบัติการอื่นเช่นกัน ตัวอย่างเช่น ในSINTRAN IIIการเชื่อมโยง (การประกอบไฟล์ออบเจ็กต์เข้าเป็นโปรแกรม) เรียกว่าการโหลดเช่นเดียวกับการโหลดโค้ดที่สามารถเรียกใช้งานได้ลงในไฟล์[ 5 ] )

จีเอ็นยู

GNU ld ซึ่งเป็นส่วนหนึ่งของGNU Binary Utilities (binutils) เป็น เวอร์ชัน ของโครงการ GNUสำหรับตัวเชื่อมโยงแบบคงที่ของ Unix สคริปต์ตัวเชื่อมโยงสามารถส่งผ่านไปยัง GNU ld เพื่อควบคุมกระบวนการเชื่อมโยงอย่างละเอียด[ 6 ] binutils มี ld สองเวอร์ชัน ได้แก่ GNU ld แบบดั้งเดิมที่ใช้bfdและเวอร์ชันที่ปรับปรุงให้กระชับขึ้นสำหรับ ELF เท่านั้นที่เรียกว่าgold

ตัวเชื่อมโยงของโครงการLLVMlldได้รับการออกแบบให้สามารถใช้งานร่วมกันได้ โดยตรง [ 7 ]และสามารถใช้กับคอมไพเลอร์ GNU ได้โดยตรง mold ซึ่งเป็นตัวเลือกทดแทนที่ใช้งานร่วมกันได้อีกอย่างหนึ่ง มีประสิทธิภาพการประมวลผลแบบขนานสูงและเร็วกว่า ซึ่งได้รับการสนับสนุนโดยเครื่องมือ GNU เช่นกัน [ 8 ]

ดูเพิ่มเติม

อ่านเพิ่มเติม

  • Fraser, Christopher W.; Hanson, David R. (เมษายน 1982). "ตัวเชื่อมโยงที่ไม่ขึ้นกับเครื่องจักร" ซอฟต์แวร์: การปฏิบัติและประสบการณ์ 12 ( 4). John Wiley & Sons Ltd : 351– 366. doi : 10.1002/spe.4380120407 . ISSN  1097-024X . S2CID  206508204 .
  • ระบบปฏิบัติการ 360 - โปรแกรมแก้ไขการเชื่อมโยง (E) - คู่มือตรรกะโปรแกรม (PDF) (ฉบับที่ 3)บริษัท อินเตอร์เนชั่นแนล บิสซิเนส แมชชีนส์ คอร์ปอเรชั่น 23 กรกฎาคม 1969 [มิถุนายน 1967] หมายเลขโปรแกรม 360S-ED-510 หมายเลขไฟล์ S360-31 แบบฟอร์ม Y28-6610-2 เก็บถาวรจากต้นฉบับ(PDF)เมื่อ 1 ตุลาคม 2007เรียกดูเมื่อ7 มีนาคม 2020
  • Jones, Douglas W. (สิงหาคม 1983). "ภาษาแอสเซมบลีเป็นรหัสวัตถุ" ซอฟต์แวร์: การปฏิบัติและประสบการณ์ 13 ( 8). John Wiley & Sons Ltd : 715– 725. doi : 10.1002/spe.4380130806 . ISSN  1097-024X . S2CID  42995338 .
  • เลวีน, จอห์น อาร์. (2000) [ตุลาคม 1999]. ตัวเชื่อมโยงและตัวโหลด . ชุดหนังสือวิศวกรรมซอฟต์แวร์และการเขียนโปรแกรมของมอร์แกน คอฟแมน (ฉบับที่ 1). ซานฟรานซิสโก สหรัฐอเมริกา: มอร์แกน คอฟแมน . ISBN 1-55860-496-0. OCLC  42413382 . สืบค้นเมื่อ2020-01-12 .รหัส: [1]ข้อผิดพลาด: [2]
  • Presser, Leon ; White, John R. (กันยายน 1972). "Linkers and Loaders" (PDF) . ACM Computing Surveys . 4 (3). มหาวิทยาลัยแคลิฟอร์เนีย ซานตาบาร์บารา แคลิฟอร์เนีย สหรัฐอเมริกา: 149– 167. doi : 10.1145/356603.356605 . S2CID  5694671 . เก็บถาวร(PDF)จากต้นฉบับเมื่อ 2020-03-07 . เรียกดูเมื่อ2020-03-07 .(19 หน้า)
  • Ramsey, Norman (พฤษภาคม 1996). "การย้ายตำแหน่งคำสั่งเครื่องจักรโดย Currying" (PDF) . ACM SIGPLAN Notices . 31 (5): 226– 236. doi : 10.1145/249069.231429 . เก็บถาวร(PDF)จากต้นฉบับเมื่อ 2020-05-18.
  • บทความในบล็อกLinkersของ Ian Lance Taylor
  • Linkers and Loaders บทความ จากLinux Journalโดย Sandeep Grover
  • รายชื่อแหล่งดาวน์โหลดชุดเครื่องมือฟรีครบชุดสำหรับการพัฒนาภาษาแอสเซมบลี
  • คู่มือการเชื่อมโยง GNU
  • LLD - ตัวเชื่อมโยง LLVM
  • ld(1): ตัวเชื่อมโยง GNU –  คู่มือผู้ใช้Linux – คำสั่งผู้ใช้
ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=Linker_(computing)&oldid=1356551355#Common_implementations "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ ตัวเชื่อม (คอมพิวเตอร์)

โปรแกรมเชื่อมโยง (linkerหรือlink editor)คือโปรแกรมคอมพิวเตอร์ที่รวม ไฟล์ สร้างซอฟต์แวร์ ระดับกลาง เช่นไฟล์ออบเจ็กต์และ ไฟล์ ไลบรารี เข้าเป็นไฟล์ ปฏิบัติการเดียวเช่น...

ภาพรวม

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

การเชื่อมโยงแบบไดนามิก

ระบบปฏิบัติการ หลายๆระบบอนุญาตให้ใช้การเชื่อมโยงแบบไดนามิก ซึ่งจะเลื่อนการแก้ไขสัญลักษณ์ที่ไม่นิยามไว้บางส่วนไปจนกว่าโปรแกรมจะทำงาน นั่นหมายความว่าโค้ดที่ทำงานได้ยังคงมีสัญลักษณ์ที่ไม่นิยามไว้...

การเชื่อมโยงแบบคงที่

การเชื่อมโยงแบบคงที่ (Static linking) เกิดจากการที่ตัวเชื่อมโยง (linker) คัดลอกรูทีนไลบรารีทั้งหมดที่ใช้ในโปรแกรมลงในอิมเมจไฟล์ปฏิบัติการ วิธีนี้อาจใช้พื้นที่ดิสก์และหน่วยความจำมากกว่าการเชื่อมโยงแบบไดนามิก (Dynamic linking) แต่พกพาสะดวกกว่า...