ความแตกต่างระหว่างไฟล์. a และ. so คืออะไร


65

เท่าที่ฉันเข้าใจพวกเขาเป็นห้องสมุด แต่ความแตกต่างระหว่างสองคืออะไร


คำตอบ:


54

.aไฟล์เป็นห้องสมุดแบบคงที่ในขณะที่.soไฟล์เป็นวัตถุที่ใช้ร่วมกัน (ไดนามิก) ห้องสมุดคล้ายกับ DLL บน Windows มีข้อมูลโดยละเอียดเกี่ยวกับความแตกต่างระหว่างสองอย่างนี้ในหน้านี้


18
.aสามารถรวมเป็นส่วนหนึ่งของโปรแกรมในระหว่างการรวบรวมเท่านั้น .soสามารถ "นำเข้า" ในขณะที่โปรแกรมโหลด
LawrenceC

2
.a หมายถึงอะไร
hfrmobile

2
@hfrmobile a หมายถึงไฟล์เก็บถาวร - ไลบรารีแบบสแตติกคือชุดของไฟล์วัตถุที่สร้างขึ้นโดยใช้arยูทิลิตี้ ข้อมูลเพิ่มเติมที่นี่
ajk

28

ดังต่อไปนี้ไฟล์. 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ผมไม่ทราบว่าผมจะเรียกมันว่า
Faheem Mitha

1
มันเป็นโปรแกรมที่สมบูรณ์แบบในแง่ที่ว่ามันมีสัญลักษณ์หลักสำหรับผู้บริหารเพื่อค้นหา
Hack Saw

2
นอกจากนี้คุณยังสามารถเรียกใช้lddบน. so และจะแสดงให้คุณเห็นว่าห้องสมุดอื่น ๆ ใช้งานอย่างไร คงที่จะกลับมาพร้อมกับข้อความว่ามันไม่ได้เป็นห้องสมุดแบบไดนามิก
Marcin
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.