โปรแกรมเชื่อมโยง

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

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

บนเครื่องเมนเฟรมของไอบีเอ็ม เช่น OS/360 เรียกโปรแกรมเชื่องโยงว่าตัวแก้ไขการเชื่อม (linkage editor)

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

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

  • สัญลักษณ์ส่งออก (Defined symbol, exported symbol) ใช้บ่งบอกถึงฟังก์ชันและตัวแปรซึ่งมีอยู่ในไฟล์ออบเจกต์นั้นและส่วนโปรแกรมอื่นๆ สามารถเรียกใช้ได้
  • สัญลักษณ์นำเข้า (Undefined symbol, imported symbol) ใช้บ่งบอกถึงฟังก์ชันและตัวแปรซึ่งมีการอ้างถึงหรือเรียกใช้ในไฟล์ออกเจกต์ แต่ยังไม่ได้นิยามในในไฟล์ออบเจกต์นั้น

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

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