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ตัวเลือกที่จะแต่คุณสามารถเปลี่ยนได้ในภายหลังด้วยldchrpath
ในสถานการณ์ที่คุณอธิบายถ้าคุณพัฒนาหรือแพกเกจของโปรแกรมและตั้งใจเพื่อให้มีการติดตั้งใน…/bin, โครงสร้างแล้วเชื่อมโยงกับ…/lib -rpath='$ORIGIN/../lib'หากคุณกำลังติดตั้งไบนารีที่สร้างไว้ล่วงหน้าในระบบของคุณไม่ว่าจะใส่ห้องสมุดในไดเรกทอรีบนเส้นทางการค้นหา ( /usr/local/libถ้าคุณเป็นผู้ดูแลระบบมิฉะนั้นไดเรกทอรีที่คุณเพิ่ม$LD_LIBRARY_PATH) chrpathหรือลอง
/lib64และ/usr/lib64ใช้สำหรับไบนารี 64 บิต/libและ/usr/libใช้สำหรับไบนารี 32 บิต