ไฟล์. a และ. so คืออะไร


427

ฉันกำลังพยายามพอร์ตแอปพลิเคชัน C ไปยังAIXและเริ่มสับสน ไฟล์. a และ. so คืออะไรและใช้อย่างไรเมื่อสร้าง / เรียกใช้แอปพลิเคชัน


116
หนึ่งคือarchive ห้องสมุดและอื่น ๆshared object
Shiplu Mokaddim

มีความเป็นไปได้ที่ซ้ำกันของไฟล์ไลบรารี. so, .la และ. a แตกต่างกันอย่างไร .
Peter Mortensen

คำตอบ:


483

ไลบรารีเก็บถาวร (.a) ถูกเชื่อมโยงแบบคงที่เช่นเมื่อคุณรวบรวมโปรแกรมของคุณด้วยตัวเลือก -c ใน gcc ดังนั้นหากมีการเปลี่ยนแปลงในไลบรารี่คุณจะต้องรวบรวมและสร้างโค้ดของคุณอีกครั้ง

ข้อดีของ. so (shared object) เหนือ. a library คือมันถูกลิงค์ระหว่าง runtime นั่นคือหลังจากการสร้างตัวเลือก. o ไฟล์ -o ใน gcc ดังนั้นหากมีการเปลี่ยนแปลงใด ๆ ในไฟล์. so คุณไม่จำเป็นต้องคอมไพล์โปรแกรมหลักของคุณใหม่ แต่ตรวจสอบให้แน่ใจว่าโปรแกรมหลักของคุณเชื่อมโยงกับไฟล์. so ใหม่ด้วยคำสั่ง ln

สิ่งนี้จะช่วยคุณสร้างไฟล์. so http://www.yolinux.com/TUTORIALS/LibraryArchives-StaticAndDynamic.html

หวังว่านี่จะช่วยได้


2
สิ่งเหล่านี้เกี่ยวข้องกับpic(รหัสตำแหน่งอิสระ) หรือไม่
transang

213

.a เป็นไลบรารีแบบคงที่ หากคุณใช้รหัสที่เก็บอยู่ภายในรหัสนั้นจะถูกนำมาจากโค้ดเหล่านั้นและฝังลงในไบนารีของคุณเอง ใน Visual Studio ไฟล์เหล่านี้จะเป็น. lib

.so เป็นไลบรารีแบบไดนามิก หากคุณใช้รหัสที่เก็บอยู่ภายในรหัสนั้นจะไม่ถูกนำไปฝังในไบนารีของคุณเอง แต่มันเป็นเพียงการอ้างอิงดังนั้นไบนารีจะขึ้นอยู่กับพวกเขาและรหัสจากไฟล์เพื่อเพิ่ม / โหลดที่รันไทม์ ใน Visual Studio / Windows ไฟล์เหล่านี้จะเป็น. dll (โดยมีไฟล์. lib ขนาดเล็กที่มีข้อมูลเชื่อมโยงอยู่)


สวัสดีมีตัวเลือกใด ๆ ในการถอดรหัสไฟล์. so ในรหัส c / c ++?
Jishant


.libไฟล์ขนาดเล็กสำหรับ.dllเรียกว่าห้องสมุดนำเข้า
โปรแกรมเมอร์ที่มุ่งเน้นเงิน (Money Oriented Programmer)

13

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

ในการทำพอร์ตคุณจะต้องมีซอร์สโค้ดที่ถูกคอมไพล์เพื่อสร้างมันหรือไฟล์ที่เทียบเท่าบนเครื่อง AIX ของคุณ


ฉันจะสร้างแอปพลิเคชันของฉันเพื่อใช้ไฟล์. so ได้อย่างไร
Dunc

มีการอ้างอิงที่ยอดเยี่ยมมากมายสำหรับการสร้างห้องสมุดทั้งสองประเภทและเชื่อมโยงไปยังพวกเขาบนเว็บ Google คือเพื่อนของคุณ
David Pointer

@Dunc - มีหลายวิธี คุณมี makefile หรือไม่? โดยปกติแล้วคำสั่งที่ประกอบทั้งโปรแกรม (และเรียกใช้ตัวลิงก์) จะระบุตำแหน่งที่ต้องการค้นหาไฟล์ไลบรารีด้วย -L ​​/ dir / dir1 /.../ และอาจตั้งชื่อไลบรารีอย่างชัดเจนด้วย -lname คุณจะพบว่าชื่อจริงคือ libname.a หรือ libname.so ตัวเชื่อมโยงสามารถคิดได้ว่าจะทำอย่างไรถ้านี่เป็นโปรแกรมปกติที่สมเหตุสมผล แต่คุณยังคงมีปัญหาในการสร้างหรือค้นหาไฟล์. so คุณมีซอร์สโค้ดเพื่อสร้างมันหรือไลบรารี AIX หรือไม่?
gbulmer

10

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

คุณสามารถค้นหาที่เก็บได้โดยดูที่ไดเรกทอรี lib ... /usr/libและ/libมีส่วนใหญ่แล้วยังมีLIBRARY_PATHตัวแปรสภาพแวดล้อม


0

Wikipedia เป็นแหล่งข้อมูลที่ดีสำหรับข้อมูลนี้

หากต้องการเรียนรู้เกี่ยวกับไฟล์ไลบรารีแบบคงที่เช่น. ให้อ่านแบบคงที่ libarary

หากต้องการเรียนรู้เกี่ยวกับไฟล์ไลบรารีที่ใช้ร่วมกันเช่น. ดังนั้นโปรดอ่านLibrary_ (การคำนวณ) #Shared_l ไลบรารีในหน้านี้นอกจากนี้ยังมีข้อมูลที่เป็นประโยชน์ในส่วนการตั้งชื่อไฟล์

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