HOWTO ห้องสมุดสาธารณะอธิบายมากที่สุดของกลไกที่เกี่ยวข้องและคู่มือรถตักดินแบบไดนามิกไปในรายละเอียดมากขึ้น ตัวแปร unix แต่ละตัวมีวิธีการของตัวเอง แต่ส่วนใหญ่ใช้รูปแบบที่ปฏิบัติการได้เหมือนกัน ( ELF ) และมีตัวเชื่อมโยงแบบไดนามิกที่คล้ายกัน(มาจาก Solaris) ด้านล่างฉันจะสรุปพฤติกรรมทั่วไปโดยมุ่งเน้นที่ Linux ตรวจสอบคู่มือระบบของคุณสำหรับเรื่องราวทั้งหมด
สรุปเมื่อมองหาไลบรารี่แบบไดนามิก ( .so
ไฟล์) ตัวเชื่อมโยงจะพยายาม:
- ไดเรกทอรีที่ระบุไว้ใน
LD_LIBRARY_PATH
ตัวแปรสภาพแวดล้อม ( DYLD_LIBRARY_PATH
บน OSX);
- ไดเรกทอรีที่ระบุไว้ในปฏิบัติการของRPATH ;
- ไดเรกทอรีบนเส้นทางการค้นหาของระบบซึ่ง (บน Linux อย่างน้อย) ประกอบด้วยรายการใน
/etc/ld.so.conf
บวกและ/lib
/usr/lib
rpath จะถูกเก็บไว้ในไฟล์เรียกทำงาน (เป็นแอ็ตทริบิวต์DT_RPATH
หรือDT_RUNPATH
ไดนามิก) มันสามารถมีเส้นทางที่แน่นอนหรือเส้นทางที่เริ่มต้นด้วย$ORIGIN
เพื่อระบุเส้นทางที่สัมพันธ์กับสถานที่ตั้งของปฏิบัติการ (เช่นถ้าที่ปฏิบัติการอยู่ใน/opt/myapp/bin
และ RPATH ของมัน$ORIGIN/../lib:$ORIGIN/../plugins
แล้วลิงเกอร์แบบไดนามิกจะมีลักษณะใน/opt/myapp/lib
และ/opt/myapp/plugins
) RPATH จะถูกกำหนดตามปกติเมื่อปฏิบัติการจะรวบรวมกับ-rpath
ตัวเลือกที่จะแต่คุณสามารถเปลี่ยนได้ในภายหลังด้วยld
chrpath
ในสถานการณ์ที่คุณอธิบายถ้าคุณพัฒนาหรือแพกเกจของโปรแกรมและตั้งใจเพื่อให้มีการติดตั้งใน…/bin
, โครงสร้างแล้วเชื่อมโยงกับ…/lib
-rpath='$ORIGIN/../lib'
หากคุณกำลังติดตั้งไบนารีที่สร้างไว้ล่วงหน้าในระบบของคุณไม่ว่าจะใส่ห้องสมุดในไดเรกทอรีบนเส้นทางการค้นหา ( /usr/local/lib
ถ้าคุณเป็นผู้ดูแลระบบมิฉะนั้นไดเรกทอรีที่คุณเพิ่ม$LD_LIBRARY_PATH
) chrpath
หรือลอง
/lib64
และ/usr/lib64
ใช้สำหรับไบนารี 64 บิต/lib
และ/usr/lib
ใช้สำหรับไบนารี 32 บิต