เท่าที่ฉันเข้าใจพวกเขาเป็นห้องสมุด แต่ความแตกต่างระหว่างสองคืออะไร
เท่าที่ฉันเข้าใจพวกเขาเป็นห้องสมุด แต่ความแตกต่างระหว่างสองคืออะไร
คำตอบ:
.a
ไฟล์เป็นห้องสมุดแบบคงที่ในขณะที่.so
ไฟล์เป็นวัตถุที่ใช้ร่วมกัน (ไดนามิก) ห้องสมุดคล้ายกับ DLL บน Windows มีข้อมูลโดยละเอียดเกี่ยวกับความแตกต่างระหว่างสองอย่างนี้ในหน้านี้
.a
สามารถรวมเป็นส่วนหนึ่งของโปรแกรมในระหว่างการรวบรวมเท่านั้น .so
สามารถ "นำเข้า" ในขณะที่โปรแกรมโหลด
ar
ยูทิลิตี้ ข้อมูลเพิ่มเติมที่นี่
ดังต่อไปนี้ไฟล์. a เป็นไฟล์เก็บถาวร "ar" ไม่เหมือนกับ tar เก็บถาวรมันเก็บ. o หรือวัตถุไฟล์ช่วยให้พวกเขาจะถูกดึงออกมาจากการเก็บถาวรและเชื่อมโยงเข้ากับโปรแกรมเหนือสิ่งอื่นใด คุณสามารถใช้ ar เพื่อเก็บไฟล์อื่น ๆ ได้ถ้าต้องการ
คุณสามารถรับรายชื่อสมาชิกของไฟล์ ar ด้วยพารามิเตอร์ -t ตัวอย่างเช่น:
ar -t /usr/lib/libc.a
ไฟล์. so เป็นไฟล์ "วัตถุที่ใช้ร่วมกัน" และมีข้อมูลเพิ่มเติมมากมายสำหรับ linker เพื่อให้สมาชิกสามารถเชื่อมโยงกับโปรแกรมโหลดได้อย่างรวดเร็วที่สุด
ตัวอย่างเช่นลอง:
objdump -T /lib/libc-2.11.1.so
(หรือเวอร์ชันใด ๆ ของ libc.so ที่คุณมีในไดเรกทอรี / lib ของคุณ) โปรดทราบว่าไฟล์. so อาจมีเพียงสคริปต์ linker ที่กำกับให้ค้นหาไฟล์อื่นหรือใช้อย่างอื่น
ที่น่าสนใจคือไฟล์. so อาจเป็นโปรแกรมที่สมบูรณ์แบบ ยกตัวอย่างเช่นพยายามทำงาน/lib/libc.so.6 (น่าเศร้าที่ส่วนสุดท้ายนี้ดูเหมือนจะไม่ทำงานในระบบที่ทันสมัยกว่านั่นไม่ใช่การสูญเสียครั้งใหญ่)
ar -t /usr/lib/libc.a
คุณหมายถึงการเขียน จริงๆแล้ว-
ดูเหมือนจะไม่จำเป็นในกรณีนี้ นอกจากนี้ยัง/lib/libc.so.6.
เป็นเพียงแค่พิมพ์ส่งออกบางส่วน full fledged program
ผมไม่ทราบว่าผมจะเรียกมันว่า
ldd
บน. so และจะแสดงให้คุณเห็นว่าห้องสมุดอื่น ๆ ใช้งานอย่างไร คงที่จะกลับมาพร้อมกับข้อความว่ามันไม่ได้เป็นห้องสมุดแบบไดนามิก