ฉันกำลังพยายามพอร์ตแอปพลิเคชัน C ไปยังAIXและเริ่มสับสน ไฟล์. a และ. so คืออะไรและใช้อย่างไรเมื่อสร้าง / เรียกใช้แอปพลิเคชัน
ฉันกำลังพยายามพอร์ตแอปพลิเคชัน C ไปยังAIXและเริ่มสับสน ไฟล์. a และ. so คืออะไรและใช้อย่างไรเมื่อสร้าง / เรียกใช้แอปพลิเคชัน
คำตอบ:
ไลบรารีเก็บถาวร (.a) ถูกเชื่อมโยงแบบคงที่เช่นเมื่อคุณรวบรวมโปรแกรมของคุณด้วยตัวเลือก -c ใน gcc ดังนั้นหากมีการเปลี่ยนแปลงในไลบรารี่คุณจะต้องรวบรวมและสร้างโค้ดของคุณอีกครั้ง
ข้อดีของ. so (shared object) เหนือ. a library คือมันถูกลิงค์ระหว่าง runtime นั่นคือหลังจากการสร้างตัวเลือก. o ไฟล์ -o ใน gcc ดังนั้นหากมีการเปลี่ยนแปลงใด ๆ ในไฟล์. so คุณไม่จำเป็นต้องคอมไพล์โปรแกรมหลักของคุณใหม่ แต่ตรวจสอบให้แน่ใจว่าโปรแกรมหลักของคุณเชื่อมโยงกับไฟล์. so ใหม่ด้วยคำสั่ง ln
สิ่งนี้จะช่วยคุณสร้างไฟล์. so http://www.yolinux.com/TUTORIALS/LibraryArchives-StaticAndDynamic.html
หวังว่านี่จะช่วยได้
pic
(รหัสตำแหน่งอิสระ) หรือไม่
.a เป็นไลบรารีแบบคงที่ หากคุณใช้รหัสที่เก็บอยู่ภายในรหัสนั้นจะถูกนำมาจากโค้ดเหล่านั้นและฝังลงในไบนารีของคุณเอง ใน Visual Studio ไฟล์เหล่านี้จะเป็น. lib
.so เป็นไลบรารีแบบไดนามิก หากคุณใช้รหัสที่เก็บอยู่ภายในรหัสนั้นจะไม่ถูกนำไปฝังในไบนารีของคุณเอง แต่มันเป็นเพียงการอ้างอิงดังนั้นไบนารีจะขึ้นอยู่กับพวกเขาและรหัสจากไฟล์เพื่อเพิ่ม / โหลดที่รันไทม์ ใน Visual Studio / Windows ไฟล์เหล่านี้จะเป็น. dll (โดยมีไฟล์. lib ขนาดเล็กที่มีข้อมูลเชื่อมโยงอยู่)
.lib
ไฟล์ขนาดเล็กสำหรับ.dll
เรียกว่าห้องสมุดนำเข้า
.a ไฟล์มักจะมีห้องสมุดที่ได้รับการเชื่อมโยงแบบคงที่ (หรือมากกว่าได้อย่างถูกต้องที่เก็บ) และ
ดังนั้นมีการเชื่อมโยงห้องสมุดแบบไดนามิก
ในการทำพอร์ตคุณจะต้องมีซอร์สโค้ดที่ถูกคอมไพล์เพื่อสร้างมันหรือไฟล์ที่เทียบเท่าบนเครื่อง AIX ของคุณ
พวกเขาจะใช้ในขั้นตอนการเชื่อมโยง .a
ไฟล์มีการเชื่อมโยงแบบสแตติกและ.so
ไฟล์เรียงลำดับจากการเชื่อมโยงเพื่อให้ห้องสมุดมีความจำเป็นทุกครั้งที่คุณเรียกใช้ exe
คุณสามารถค้นหาที่เก็บได้โดยดูที่ไดเรกทอรี lib ... /usr/lib
และ/lib
มีส่วนใหญ่แล้วยังมีLIBRARY_PATH
ตัวแปรสภาพแวดล้อม
Wikipedia เป็นแหล่งข้อมูลที่ดีสำหรับข้อมูลนี้
หากต้องการเรียนรู้เกี่ยวกับไฟล์ไลบรารีแบบคงที่เช่น. ให้อ่านแบบคงที่ libarary
หากต้องการเรียนรู้เกี่ยวกับไฟล์ไลบรารีที่ใช้ร่วมกันเช่น. ดังนั้นโปรดอ่านLibrary_ (การคำนวณ) #Shared_l ไลบรารีในหน้านี้นอกจากนี้ยังมีข้อมูลที่เป็นประโยชน์ในส่วนการตั้งชื่อไฟล์
a
rchive ห้องสมุดและอื่น ๆs
haredo
bject