ห้องสมุด (คอมพิวเตอร์)

จากวิกิพีเดีย สารานุกรมเสรี
ข้ามไปที่การนำทาง ข้ามไปที่การค้นหา

ภาพประกอบของแอปพลิเคชันที่ใช้ libvorbisfile เพื่อเล่นไฟล์Ogg Vorbis

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

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

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

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

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

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

ประวัติ

ผู้หญิงคนหนึ่งทำงานข้างตู้เก็บเอกสารที่มีไลบรารีรูทีนย่อยบนม้วนเทปเจาะรูสำหรับคอมพิวเตอร์ EDSAC

ในปี 1947 Goldstineและvon Neumannสันนิษฐานว่าน่าจะเป็นประโยชน์ในการสร้าง "ไลบรารี" ของรูทีนย่อยสำหรับการทำงานในเครื่อง IASซึ่งเป็นคอมพิวเตอร์ยุคแรกๆ ที่ยังไม่สามารถใช้งานได้ในขณะนั้น [4]พวกเขาจินตนาการถึงห้องสมุดทางกายภาพของการบันทึกลวดแม่เหล็กโดยแต่ละสายจะจัดเก็บรหัสคอมพิวเตอร์ที่ใช้ซ้ำได้ [5]

วิลค์สและทีมของเขาได้รับแรงบันดาลใจจากฟอน นอยมันน์ ได้สร้างEDSAC ตู้เก็บเอกสารที่ มี เทปเจาะรูยึดไลบรารีรูทีนย่อยสำหรับคอมพิวเตอร์เครื่องนี้ [6]โปรแกรมสำหรับ EDSAC ประกอบด้วยโปรแกรมหลักและลำดับของรูทีนย่อยที่คัดลอกมาจากไลบรารีรูทีนย่อย [7]ในปี พ.ศ. 2494 ทีมงานได้ตีพิมพ์หนังสือเรียนเรื่องการเขียนโปรแกรมเล่มแรกThe Preparation of Programs for an Electronic Digital Computerซึ่งมีรายละเอียดเกี่ยวกับการสร้างและวัตถุประสงค์ของห้องสมุด [8]

ภาษาโคบอลรวม "ความสามารถดั้งเดิมสำหรับระบบห้องสมุด" ในปี 2502, [9]แต่ฌอง ซัมเม ต อธิบายว่า "สิ่งอำนวยความสะดวกห้องสมุดไม่เพียงพอ" ในการหวนกลับ [10]

JOVIALมี Communication Pool (COMPOOL) ซึ่งเป็นไลบรารีไฟล์ส่วนหัวโดยประมาณ

ผู้สนับสนุนหลักอีกรายหนึ่งของแนวคิดห้องสมุดสมัยใหม่มาในรูปแบบของนวัตกรรมโปรแกรมย่อยของFORTRAN โปรแกรมย่อยของ FORTRAN สามารถคอมไพล์โดยอิสระจากกัน แต่คอมไพเลอร์ไม่มีตัวเชื่อมโยง ดังนั้นก่อนที่จะมีการแนะนำโมดูลใน Fortran-90 การตรวจสอบประเภท ระหว่าง โปรแกรมย่อย ของ FORTRAN [NB 1] จึงเป็นไปไม่ได้ (11)

ในช่วงกลางทศวรรษ 1960 ไลบรารีคัดลอกและมาโครสำหรับแอสเซมเบลอร์เป็นเรื่องปกติ เริ่มต้นด้วยความนิยมของIBM System/360ไลบรารีที่มีองค์ประกอบข้อความประเภทอื่นๆ เช่น พารามิเตอร์ของระบบ ก็กลายเป็นเรื่องธรรมดาเช่นกัน

Simulaเป็น ภาษา การเขียนโปรแกรมเชิงวัตถุภาษาแรก และคลาส ของมัน เกือบจะเหมือนกับแนวคิดสมัยใหม่ที่ใช้ในJava , C ++และC# แนวคิดคลาสของ Simula ยังเป็นต้นกำเนิดของแพ็คเกจในAdaและโมดูลของModula- 2 [12]แม้เมื่อพัฒนาครั้งแรกในปี 2508 คลาส Simula ก็สามารถรวมไว้ในไฟล์ไลบรารีและเพิ่มในเวลาคอมไพล์ได้ [13]

ลิงค์

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

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

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

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

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

ไลบรารีแบบคงที่

เมื่อทำการเชื่อมโยงระหว่างการสร้างไฟล์เรียกทำงานหรือไฟล์อ็อบเจ็กต์อื่น จะเรียกว่าการเชื่อมโยงแบบสแตติกหรือการรวมก่อนหน้า ในกรณีนี้ การเชื่อมโยงมักจะทำโดยlinkerแต่อาจทำโดยคอมไพเลอร์ [14]ไลบรารีแบบสแตติกหรือที่เรียกว่า อาร์ ไคฟ์ มีจุดมุ่งหมายเพื่อเชื่อมโยงแบบสแตติก ในขั้นต้น มีเพียงไลบรารีแบบคงที่เท่านั้น การเชื่อมโยงแบบสแตติกจะต้องดำเนินการเมื่อมีการคอมไพล์โมดูลใหม่

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

ห้องสมุดที่ใช้ร่วมกัน

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

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

ระบบปฏิบัติการที่ทันสมัยส่วนใหญ่[NB 2]สามารถมีไฟล์ไลบรารีที่ใช้ร่วมกันในรูปแบบเดียวกับไฟล์เรียกทำงาน ข้อเสนอนี้มีข้อดีหลักสองประการ: ประการแรก ต้องมีการสร้างตัวโหลดเพียงตัวเดียวสำหรับทั้งสองตัว แทนที่จะเป็นสองตัว (การที่มีตัวโหลดตัวเดียวถือว่าคุ้มกับความซับซ้อนที่เพิ่มเข้ามา) [ ต้องการ การอ้างอิง ] ประการที่สอง อนุญาตให้ใช้ไฟล์เรียกทำงานเป็นไลบรารีที่แบ่งใช้ หากมีตารางสัญลักษณ์ รูปแบบไฟล์ปฏิบัติการและไลบรารีที่ใช้ร่วมกันโดยทั่วไป ได้แก่ELFและMach-O (ทั้งใน Unix) และPE (Windows)

ในสภาพแวดล้อมที่เก่ากว่าบางระบบ เช่นWindows 16 บิตหรือMPEสำหรับHP 3000อนุญาตให้ใช้เฉพาะข้อมูลแบบสแต็ก (ในเครื่อง) ในโค้ดไลบรารีที่ใช้ร่วมกัน หรือข้อจำกัดที่สำคัญอื่นๆ ในโค้ดไลบรารีที่ใช้ร่วมกัน

การแบ่งปันหน่วยความจำ

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

โปรแกรมสามารถแชร์ RAM ได้สำเร็จโดยใช้โค้ดที่ไม่ขึ้นกับตำแหน่ง เช่นเดียวกับในUnixซึ่งนำไปสู่สถาปัตยกรรมที่ซับซ้อนแต่ยืดหยุ่น หรือโดยการใช้ที่อยู่เสมือนทั่วไป เช่นใน Windows และOS/ 2 ระบบเหล่านี้ทำให้แน่ใจด้วยกลอุบายต่างๆ เช่น การแมปพื้นที่ที่อยู่ล่วงหน้าและช่องจองสำหรับไลบรารีที่ใช้ร่วมกันแต่ละแห่ง รหัสนั้นมีโอกาสที่ดีที่จะถูกแบ่งปัน ทางเลือกที่สามคือร้านค้าระดับเดียว ซึ่งใช้โดยIBM System/38และผู้สืบทอด วิธีนี้อนุญาตให้ใช้โค้ดที่ขึ้นกับตำแหน่ง แต่ไม่มีข้อจำกัดที่สำคัญเกี่ยวกับตำแหน่งที่สามารถวางโค้ดหรือวิธีแชร์โค้ดได้

ในบางกรณี ไลบรารีที่แบ่งใช้เวอร์ชันต่างๆ อาจทำให้เกิดปัญหาได้ โดยเฉพาะอย่างยิ่งเมื่อไลบรารีของเวอร์ชันต่างๆ มีชื่อไฟล์เหมือนกัน และแอปพลิเคชันต่างๆ ที่ติดตั้งบนระบบต่างก็ต้องการเวอร์ชันเฉพาะ สถานการณ์ดังกล่าวเรียกว่าDLL hell ซึ่งตั้งชื่อตาม ไฟล์Windows และ OS/2 DLL ระบบปฏิบัติการสมัยใหม่ส่วนใหญ่หลังปี 2544 มีวิธีการล้างข้อมูลเพื่อขจัดสถานการณ์ดังกล่าว หรือใช้ไลบรารี "ส่วนตัว" เฉพาะแอปพลิเคชัน [16]

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

การเชื่อมโยงแบบไดนามิกหรือการเชื่อมโยงล่าช้าเป็นการดำเนินการในขณะที่กำลังโหลดโปรแกรม ( เวลาในการโหลด ) หรือดำเนินการ ( รันไทม์ ) แทนที่จะสร้างไฟล์เรียกทำงาน ไลบรารีที่ลิงก์แบบไดนามิก ( ไดนามิกลิงก์ไลบรารีหรือ DLL ในWindowsและOS/2 ; รูปภาพที่แชร์ได้ภายใต้OpenVMS ; [17]วัตถุที่ใช้ร่วมกันแบบไดนามิก หรือ DSO ภายใต้ระบบที่คล้าย Unix ) เป็นไลบรารีที่มีไว้สำหรับการลิงก์แบบไดนามิก ตัวเชื่อมโยงทำงานเพียงเล็กน้อยเท่านั้นเมื่อสร้างไฟล์ปฏิบัติการ มันบันทึกเฉพาะสิ่งที่โปรแกรมต้องการใช้ประจำห้องสมุดและชื่อดัชนีหรือหมายเลขของกิจวัตรในห้องสมุด งานเชื่อมโยงส่วนใหญ่เสร็จสิ้นในขณะที่โหลดแอปพลิเคชัน (เวลาโหลด) หรือระหว่างการดำเนินการ (รันไทม์) โดยปกติ โปรแกรมเชื่อมโยงที่จำเป็น เรียกว่า "ตัวเชื่อมโยงแบบไดนามิก" หรือ "ตัวโหลดการเชื่อมโยง" จริงๆ แล้วเป็นส่วนหนึ่งของระบบปฏิบัติการพื้นฐาน (อย่างไรก็ตาม เป็นไปได้และไม่ยากเลยที่จะเขียนโปรแกรมที่ใช้การลิงก์แบบไดนามิกและรวมตัวเชื่อมโยงแบบไดนามิกของตัวเอง แม้แต่สำหรับระบบปฏิบัติการที่ไม่สนับสนุนการลิงก์แบบไดนามิก)

เดิมโปรแกรมเมอร์ได้พัฒนาการเชื่อมโยงแบบไดนามิกในระบบปฏิบัติการMultics โดยเริ่มในปี 2507 และ MTS ( ระบบเทอร์มินัลมิชิแกน ) สร้างขึ้นในปลายทศวรรษ 1960 [18]

การเพิ่มประสิทธิภาพ

เนื่องจากไลบรารีที่แบ่งใช้บนระบบส่วนใหญ่ไม่เปลี่ยนแปลงบ่อย ระบบสามารถคำนวณที่อยู่โหลดที่น่าจะเป็นไปได้สำหรับแต่ละไลบรารีที่แบ่งใช้บนระบบก่อนที่จะมีความจำเป็นและจัดเก็บข้อมูลนั้นในไลบรารีและไฟล์เรียกทำงาน หากไลบรารีที่ใช้ร่วมกันทั้งหมดที่โหลดได้ผ่านกระบวนการนี้ ไลบรารีแต่ละตัวจะโหลดตามที่อยู่ที่กำหนดไว้ล่วงหน้า ซึ่งจะทำให้กระบวนการลิงก์แบบไดนามิกเร็วขึ้น การเพิ่มประสิทธิภาพนี้เรียกว่าการผูกล่วงหน้าหรือการเชื่อมโยงล่วงหน้าบน macOS และ Linux ตามลำดับ IBM z/VMใช้เทคนิคที่คล้ายคลึงกัน เรียกว่า "Discontinuous Saved Segments" (DCSS) [19]ข้อเสียของเทคนิคนี้รวมถึงเวลาที่ต้องใช้ในการคำนวณที่อยู่เหล่านี้ล่วงหน้าทุกครั้งที่มีการเปลี่ยนแปลงไลบรารีที่ใช้ร่วมกัน การไม่สามารถใช้การสุ่มเค้าโครงพื้นที่ที่อยู่และข้อกำหนดของพื้นที่ที่อยู่เสมือนที่เพียงพอสำหรับการใช้งาน (ปัญหาที่จะบรรเทาลงได้ด้วยการนำสถาปัตยกรรม 64 บิต มาใช้ อย่างน้อยก็ในตอนนี้)

การค้นหาไลบรารีที่รันไทม์

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

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

ไมโครซอฟต์วินโดวส์

Microsoft Windowsตรวจสอบรีจิสทรีเพื่อกำหนดตำแหน่งที่เหมาะสมในการโหลด DLL ที่ใช้วัตถุ COMแต่สำหรับ DLL อื่นๆ จะตรวจสอบไดเรกทอรีตามลำดับที่กำหนด ขั้นแรก Windows จะตรวจสอบไดเร็กทอรีที่โหลดโปรแกรมไว้ ( DLL ส่วนตัว[16] ); ไดเร็กทอรีใด ๆ ที่กำหนดโดยการเรียกใช้SetDllDirectory()ฟังก์ชัน ไดเร็กทอรี System32, System และ Windows; จากนั้นไดเร็กทอรีการทำงานปัจจุบัน และสุดท้ายไดเร็กทอรีที่ระบุโดยตัวแปรสภาพแวดล้อม PATH [20]แอปพลิเคชันที่เขียนขึ้นสำหรับ.NET Framework (ตั้งแต่ปี 2002) ให้ตรวจสอบGlobal Assembly Cacheว่าเป็นที่จัดเก็บหลักของไฟล์ dll ที่แชร์เพื่อขจัดปัญหาDLL นรก

OpenStep

OpenStepใช้ระบบที่ยืดหยุ่นมากขึ้น โดยรวบรวมรายชื่อไลบรารีจากตำแหน่งที่ทราบจำนวนหนึ่ง (คล้ายกับแนวคิด PATH) เมื่อระบบเริ่มทำงานครั้งแรก การย้ายไลบรารีไปรอบๆ นั้นไม่มีปัญหาใดๆ แม้ว่าผู้ใช้จะต้องเสียค่าใช้จ่ายในการเริ่มระบบครั้งแรก

ระบบคล้ายยูนิกซ์

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

โหลดไดนามิก

การโหลดแบบไดนามิก ซึ่งเป็นชุดย่อยของการลิงก์แบบไดนามิก เกี่ยวข้องกับการโหลดและยกเลิกการโหลดไลบรารีที่ลิงก์แบบไดนามิก ณรันไทม์ตามคำขอ คำขอดังกล่าวอาจทำโดยปริยายหรือโดยชัดแจ้ง คำขอโดยนัยเกิดขึ้นเมื่อคอมไพเลอร์หรือตัวเชื่อมโยงแบบคงที่เพิ่มการอ้างอิงไลบรารีที่มีเส้นทางของไฟล์หรือเพียงแค่ชื่อไฟล์ [ ต้องการการอ้างอิง ]คำขอที่ชัดเจนเกิดขึ้นเมื่อแอปพลิเคชันทำการเรียกโดยตรงไปยัง API ของระบบปฏิบัติการ

ระบบปฏิบัติการส่วนใหญ่ที่สนับสนุนไลบรารีที่เชื่อมโยงแบบไดนามิกยังสนับสนุนการโหลดไลบรารีดังกล่าวแบบไดนามิกผ่านAPIตัวเชื่อมโยงรันไทม์ ตัวอย่างเช่นMicrosoft Windowsใช้ฟังก์ชัน API และกับ Microsoft Dynamic Link Libraries ระบบที่ใช้ POSIXรวมถึงระบบที่คล้าย UNIX และ UNIX ส่วนใหญ่ การใช้และ. ระบบการพัฒนาบางระบบทำให้กระบวนการนี้เป็นไปโดยอัตโนมัติ LoadLibraryLoadLibraryExFreeLibraryGetProcAddressdlopendlclosedlsym

ไลบรารีวัตถุ

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

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

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

ในบางครั้ง ไลบรารีอ็อบเจ็กต์มีสถานะเป็น "สิ่งที่ยิ่งใหญ่ต่อไป" ในโลกของการเขียนโปรแกรม มีความพยายามมากมายที่จะสร้างระบบที่จะทำงานข้ามแพลตฟอร์มได้ และบริษัทต่างๆ ได้แข่งขันกันเพื่อพยายามให้นักพัฒนาถูกล็อกเข้าสู่ระบบของตนเอง ตัวอย่าง ได้แก่System Object Model (SOM/DSOM) ของ IBM), Sun Microsystems ' Distributed Objects Everywhere ( DOE), NeXT 's Portable Distributed Objects (PDO), ObjectBrokerของDigital , Component Object Modelของ Microsoft (COM/DCOM) และระบบที่ใช้ CORBAจำนวนเท่าใดก็ได้

ห้องสมุดชั้นเรียน

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

ทุกวันนี้ ไลบรารีคลาสส่วนใหญ่ถูกเก็บไว้ในที่เก็บแพ็คเกจ (เช่น Maven Central สำหรับ Java) รหัสไคลเอ็นต์ประกาศการพึ่งพาไลบรารีภายนอกอย่างชัดเจนในไฟล์การกำหนดค่าบิลด์ (เช่น Maven Pom ใน Java)

ห้องสมุดระยะไกล

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

อย่างไรก็ตาม วิธีการดังกล่าวหมายความว่าการเรียกห้องสมุดทุกครั้งต้องใช้ค่าใช้จ่ายจำนวนมาก การโทร RPC นั้นแพงกว่าการเรียกไลบรารีที่ใช้ร่วมกันซึ่งโหลดไว้ในเครื่องเดียวกันแล้ว วิธีนี้มักใช้ในสถาปัตยกรรมแบบกระจายซึ่งใช้การเรียกระยะไกลจำนวนมาก โดยเฉพาะระบบไคลเอ็นต์-เซิร์ฟเวอร์ และเซิร์ฟเวอร์แอปพลิเคชันเช่น Enterprise JavaBeans

ไลบรารีการสร้างโค้ด

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

การตั้งชื่อไฟล์

ระบบที่คล้ายกับ Unix ที่ทันสมัยที่สุด

ระบบจัดเก็บlibfoo.aและlibfoo.soไฟล์ในไดเร็กทอรีเช่น/lib, /usr/libหรือ/usr/local/lib. ชื่อไฟล์ขึ้นต้นด้วย เสมอlibและลงท้ายด้วยคำต่อท้ายของ.a( archive , ไลบรารีแบบคงที่) หรือของ.so(อ็อบเจ็กต์ที่แบ่งใช้, ไลบรารีที่ลิงก์แบบไดนามิก) บางระบบอาจมีชื่อหลายชื่อสำหรับไลบรารีที่เชื่อมโยงแบบไดนามิก โดยทั่วไปชื่อเหล่านี้จะใช้คำนำหน้าเดียวกันและมีคำต่อท้ายที่แตกต่างกันซึ่งระบุหมายเลขเวอร์ชัน ชื่อส่วนใหญ่เป็นชื่อสำหรับลิงก์สัญลักษณ์ไปยังเวอร์ชันล่าสุด ตัวอย่างเช่น ในบางระบบlibfoo.so.2จะเป็นชื่อไฟล์สำหรับการแก้ไขอินเทอร์เฟซหลักที่สองของไลบรารีที่เชื่อมโยงแบบlibfooไดนามิก ไฟล์ ที่.laพบในไดเร็กทอรีไลบรารีเป็นบางครั้งlibtoolไฟล์เก็บถาวรที่ระบบใช้งานไม่ได้

macOS

ระบบสืบทอดระเบียบไลบรารีแบบสแตติกจากBSDโดยที่ไลบรารีจะจัดเก็บไว้ใน.aไฟล์ และสามารถใช้.soไลบรารีที่ลิงก์ไดนามิก -style ได้ (โดยมี.dylibส่วนต่อท้ายแทน) อย่างไรก็ตาม ไลบรารีส่วนใหญ่ใน macOS ประกอบด้วย "frameworks" ซึ่งอยู่ในไดเร็กทอรีพิเศษที่เรียกว่า " bundles " ซึ่งรวมไฟล์และข้อมูลเมตาที่จำเป็นของไลบรารีไว้ ตัวอย่างเช่น เฟรมเวิร์กที่เรียกMyFrameworkจะถูกนำไปใช้ในชุดรวมที่ชื่อMyFramework.frameworkโดยMyFramework.framework/MyFrameworkเป็นไฟล์ไลบรารีที่ลิงก์แบบไดนามิก หรือเป็นลิงก์เชื่อมโยงไปยังไฟล์ไลบรารีที่ลิงก์แบบไดนามิกในMyFramework.framework/Versions/Current/MyFramework.

ไมโครซอฟต์วินโดวส์

ไลบรารีไดนามิกลิงก์มักจะมีส่วนต่อท้าย*.DLL[ 22]แม้ว่านามสกุลไฟล์อื่น ๆ อาจระบุไลบรารีที่เชื่อมโยงแบบไดนามิกเพื่อวัตถุประสงค์เฉพาะ เช่น*.OCXสำหรับไลบรารีOLE การแก้ไขส่วนต่อประสานนั้นเข้ารหัสในชื่อไฟล์หรือแยกออกโดยใช้อินเทอร์เฟซCOM-object ขึ้นอยู่กับวิธีการคอมไพล์*.LIBไฟล์สามารถเป็นไลบรารีสแตติกหรือการแสดงแทนไลบรารีที่เชื่อมโยงไดนามิกที่จำเป็นในระหว่างการคอมไพล์เท่านั้น เรียกว่า " ไลบรารีนำเข้า " ไม่เหมือนกับใน โลก UNIXที่ใช้นามสกุลไฟล์ต่างกัน เมื่อทำการลิงก์กับ.LIBไฟล์ในWindowsก่อนอื่นต้องรู้ว่าเป็นไลบรารีสแตติกปกติหรือไลบรารีนำเข้า ในกรณีหลัง.DLLไฟล์จะต้องมีอยู่ที่รันไทม์

ดูเพิ่มเติม

หมายเหตุ

  1. ^ มันเป็นไปได้ก่อนหน้านี้ระหว่าง เช่น โปรแกรมย่อย Ada
  2. ^ ระบบที่เก่ากว่าบางระบบ เช่น Burroughs MCP , Multicsก็มีรูปแบบเดียวสำหรับไฟล์สั่งการ ไม่ว่าจะแชร์หรือไม่ก็ตาม

อ้างอิง

  1. ^ dx.doi.org . ดอย : 10.1107/ s1600576715005518 /fs5094sup1.zip http://dx.doi.org/10.1107/s1600576715005518/fs5094sup1.zip สืบค้นเมื่อ2021-05-27 . {{cite journal}}: หายไปหรือว่างเปล่า|title=( ช่วยด้วย )
  2. ^ Deshpande, Prasad (2013). การตรวจจับการเปลี่ยนแปลงโดยใช้การวิเคราะห์กราฟการเรียกใช้ฟังก์ชัน (วิทยานิพนธ์) ห้องสมุดมหาวิทยาลัยแห่งรัฐซานโฮเซ ดอย : 10.31979/ etd.t9xm -ahsc
  3. ^ "ไลบรารีแบบคงที่" . ทีดีพี. เก็บถาวรจากต้นฉบับเมื่อ2013-07-03 ดึงข้อมูลเมื่อ2013-10-03
  4. โกลด์สตีน, เฮอร์แมน เอช. (2008-12-31). คอมพิวเตอร์จาก Pascal ถึงvon Neumann พรินซ์ตัน: สำนักพิมพ์มหาวิทยาลัยพรินซ์ตัน. ดอย : 10.1515/9781400820139 . ISBN 978-1-4008-2013-9.
  5. ^ โกลด์สตีน, เฮอร์แมน ; ฟอน นอยมันน์, จอห์น (1947) การวางแผนและการเข้ารหัสปัญหาสำหรับเครื่องมือคำนวณอิเล็กทรอนิกส์ (รายงาน) สถาบันเพื่อการศึกษาขั้นสูง. หน้า 3, 21–22. สพฐ . 26239859 . อาจเป็นสิ่งสำคัญมากในการพัฒนา "ไลบรารี" ของรูทีนย่อยที่กว้างขวาง 
  6. วิลค์ส, เอ็มวี (1951). "คอมพิวเตอร์ EDSAC" . 1951 การประชุมเชิงปฏิบัติการระดับนานาชาติเรื่องการจัดการความต้องการความรู้ 1951 การประชุมเชิงปฏิบัติการระหว่างประเทศเกี่ยวกับการจัดการความรู้ข้อกำหนด อีอีอี หน้า 79. ดอย : 10.1109/afips.1951.13 .
  7. แคมป์เบลล์-เคลลี่, มาร์ติน (กันยายน 2011) "ในการสรรเสริญ 'Wilkes, Wheeler และ Gill'.การสื่อสารของ ACM . 54 (9): 25–27. doi : 10.1145/1995376.1995386 . S2CID  20261972 .
  8. วิลค์ส, มอริซ ; วีลเลอร์, เดวิด ; กิลล์, สแตนลีย์ (1951). การจัดเตรียมโปรแกรมสำหรับคอมพิวเตอร์ดิจิตอลอิเล็คทรอนิคส์ แอดดิสัน-เวสลีย์. หน้า 45, 80–91, 100. OCLC 641145988 . 
  9. เวกเซลแบลต, ริชาร์ด (1981). ประวัติภาษาโปรแกรมมิ่ง . ACM Monograph Series. New York, NY: Academic Press (บริษัท ย่อยของHarcourt Brace ) หน้า 274 . ISBN 0-12-745040-8.
  10. ^ เวกเซลแบลต, อ . อ้าง , พี. 258
  11. วิลสัน เลสลี่ บี.; คลาร์ก, โรเบิร์ต จี. (1988). ภาษาโปรแกรมเปรียบเทียบ Wokingham, England: แอดดิสัน-เวสลีย์ หน้า 126. ISBN 0-201-18483-4.
  12. วิลสันและคลาร์ก,แย้มยิ้ม. อ้าง , พี. 52
  13. ^ เวกเซลแบลต, อ . อ้าง , พี. 716
  14. ^ Kaminsky, Dan (2008), "Portable Executable and Executable and Linking Formats" , Reverse Engineering Code with IDA Pro , Elsevier, pp. 37–66, doi : 10.1016/b978-1-59749-237-9.00003-x , ISBN 978-1-59749-237-9, เรียกข้อมูลเมื่อ 2021-05-27
  15. ↑ Christian Collberg , John H. Hartman, Sridivya Babu, Sharath K. Udupa (2003). "SLINKY: โหลด การลิงก์แบบคง ที่แล้ว " ภาควิชาวิทยาการคอมพิวเตอร์มหาวิทยาลัยแอริโซนา . เก็บถาวรจากต้นฉบับเมื่อ 2016-03-23 ​​. สืบค้นเมื่อ2016-03-17 .{{cite web}}: CS1 maint: ใช้พารามิเตอร์ผู้เขียน ( ลิงค์ )
  16. อรรถเป็น แอนเดอร์สัน, ริก (2000-01-11) "จุดจบของ DLL นรก" . microsoft.com เก็บถาวรจากต้นฉบับเมื่อ 2001-06-05 . สืบค้นเมื่อ2012-01-15 . DLL ส่วนตัวคือ DLL ที่ติดตั้งกับแอปพลิเคชันเฉพาะและใช้งานโดยแอปพลิเคชันนั้นเท่านั้น
  17. ^ "คู่มือยูทิลิตี้ VSI OpenVMS Linker" (PDF ) วีเอสไอ. สิงหาคม 2019 . ดึงข้อมูลเมื่อ2021-01-31
  18. ^ "ประวัติของเอ็มทีเอ". ข้อมูลสรุปเทคโนโลยีสารสนเทศ 5 (5).
  19. ^ ไอบีเอ็ม คอร์ปอเรชั่น (2554) การวางแผนและการจัดการเซ็กเมนต์ที่บันทึกไว้ (PDF ) สืบค้นเมื่อ2022-01-29 .
  20. ^ "ลำดับการค้นหาไลบรารีไดนามิกลิงก์" . ไลบรารีเครือข่ายนักพัฒนา ของMicrosoft ไมโครซอฟต์. 2012-03-06. เก็บถาวรจากต้นฉบับเมื่อ 2012-05-09 . สืบค้นเมื่อ2012-05-20 .
  21. ^ "ไลบรารีการสร้างโค้ด" . ที่มา ฟอร์จ . เก็บถาวรจากต้นฉบับเมื่อ2010-01-12 สืบค้นเมื่อ2010-03-03 . ไลบรารีการสร้างรหัสไบต์เป็น API ระดับสูงเพื่อสร้างและแปลงรหัสไบต์ JAVA มันถูกใช้โดย AOP, การทดสอบ, เฟรมเวิร์กการเข้าถึงข้อมูลเพื่อสร้างอ็อบเจ็กต์พร็อกซีแบบไดนามิกและสกัดกั้นการเข้าถึงฟิลด์
  22. ^ เบรสนาฮาน คริสติน; บลัม, ริชาร์ด (2015-04-27). LPIC-1 Linux Professional Institute Certification Guide: การสอบ 101-100 และการ สอบ102-400 John Wiley & Sons (เผยแพร่ในปี 2015) หน้า 82. ISBN  9781119021186. เก็บถาวรจากต้นฉบับเมื่อ 2015-09-24 . สืบค้นเมื่อ2015-09-03 . ไลบรารีที่ใช้ร่วมกันของ Linux นั้นคล้ายกับไดนามิกลิงก์ไลบรารี (DLL) ของ Windows Windows DLL มักจะระบุด้วย.dllนามสกุลไฟล์

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