ห้องสมุดแบบคงที่

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

ข้อดีและข้อเสีย

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

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

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

เฉพาะสิ่งแวดล้อม

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

การเชื่อมโยงและการโหลด

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

การสร้างไลบรารีแบบคงที่ใน C/C++

ไลบรารีแบบคงที่สามารถสร้างขึ้นได้อย่างง่ายดายในภาษา CหรือในC ++ สองภาษานี้มีตัวระบุคลาสพื้นที่จัดเก็บข้อมูลเพื่อระบุการเชื่อมโยงภายนอกหรือภายใน นอกเหนือจากการให้คุณลักษณะอื่นๆ ในการสร้างไลบรารีดังกล่าว จะต้องระบุฟังก์ชัน/ขั้นตอนที่ส่งออกและตัวแปรอ็อบเจ็กต์อื่นๆ สำหรับการเชื่อมโยงภายนอก (เช่น โดยไม่ใช้staticคีย์เวิร์ด C ) ชื่อไฟล์ไลบรารีแบบคงที่มักจะมีนามสกุล " .a " บนระบบที่คล้าย Unix [1]และนามสกุล " .lib " บนMicrosoft Windows

ตัวอย่างเช่น บนระบบที่คล้าย Unix หากต้องการสร้างไฟล์เก็บถาวรชื่อlibclass.aจากไฟล์class1.o , class2.o , class3.oคำสั่งต่อไปนี้จะถูกนำมาใช้: [1]

ar rcs libclass.a class1.o class2.o class3.o

ในการคอมไพล์โปรแกรมที่ขึ้นอยู่กับclass1.o , class2.oและclass3.oเราสามารถทำได้:

ซีซี main.c libclass.a

หรือ (หากlibclass.aถูกวางไว้ในพาธไลบรารีมาตรฐาน เช่น/usr/local/lib )

ซีซี main.c -lclass

หรือ (ระหว่างการเชื่อมโยง)

ฉัน ... main.o -lclass ...

แทน:

ซีซี main.c class1.o class2.o class3.o

ดูสิ่งนี้ด้วย

อ้างอิง

  1. ↑ abc "ไลบรารีแบบคงที่" ทีแอลดีพี. สืบค้นเมื่อ 3 ตุลาคม 2556 .
  2. แอนเดอร์สัน, ริก (2000-01-11) "จุดจบของนรก DLL" microsoft.com เก็บถาวรจากต้นฉบับเมื่อ 2001-06-05 . สืบค้นเมื่อ2013-08-31 . DLL ส่วนตัวคือ DLL ที่ติดตั้งพร้อมกับแอปพลิเคชันเฉพาะและใช้โดยแอปพลิเคชันนั้นเท่านั้น
Retrieved from "https://en.wikipedia.org/w/index.php?title=Static_library&oldid=1209364355"