เป็นเรื่องปกติที่ตัวแปร LD_LIBRARY_PATH หายไปจากสภาพแวดล้อมหรือไม่


15

ฉันพบโดยบังเอิญว่าใน Debian Jessie ของฉันไม่มีLD_LIBRARY_PATHตัวแปร (ที่แน่นอนprintenv | grep LDแสดงให้เห็นว่าไม่มีอะไรเกี่ยวข้องกับ linker และecho "$LD_LIBRARY_PATH"แสดงอะไรเลย)

นี่เป็นกรณีในตัวจำลองเทอร์มินัล x ( ซึ่งอาจชัดเจนเนื่องจาก setgid ) และในเทอร์มินัลพื้นฐาน ( Ctrl+Alt+F1)

ฉันรู้ว่าLD_LIBRARY_PATH อาจจะถือว่าไม่ดีดังนั้น Debian อาจปิดกั้นมันอย่างใด แต่ในมืออื่น ๆ มีไม่กี่ไฟล์ในที่มีบางไดเรกทอรีที่จะเพิ่ม/etc/ld.so.conf.d/ LD_LIBRARY_PATHไม่มีไฟล์ rc ของฉัน (ที่ฉันรู้) ยุ่งกับLD_LIBRARY_PATHอย่างใดอย่างหนึ่ง

ทำไมฉันไม่เห็นLD_LIBRARY_PATHตัวแปร?

คำตอบ:


22

LD_LIBRARY_PATHใช่มันเป็นเรื่องปกติที่คุณไม่ได้มีอย่างชัดเจน อ่านยังldconfig (8)และLD-ลินุกซ์ (8)และเกี่ยวกับRPATH ขอให้สังเกตว่าldconfigการปรับปรุงไม่ได้/etc/ld.so.cache LD_LIBRARY_PATHบางครั้งคุณจะกำหนดเส้นทางของการปฏิบัติการอย่างชัดเจนโดยส่งผ่าน-Wl,-rpath,ไดเรกทอรีไปยังgccเวลาลิงก์

หากคุณต้องการLD_LIBRARY_PATH(แต่คุณไม่ควร) ให้ตั้งค่าด้วยตัวคุณเอง (เช่นใน ~/.bashrc)

หากคุณจำเป็นต้องตั้งค่าความกว้างของระบบคุณสามารถทำได้เช่นพิจารณาเพิ่ม /usr/local/lib/ใน/etc/ld.so.confและเรียกใช้ldconfigหลังจากการติดตั้งของห้องสมุดมีทุก

AFAIK $LD_LIBRARY_PATHถูกนำมาใช้โดยเฉพาะลิงเกอร์แบบไดนามิกld-linux.so(และโดยdlopen (3)ซึ่งจะใช้มัน) หลังจากexecve (2) ดูยังLDD (1)

อ่าน Drepper ของวิธีการเขียนห้องสมุดที่ใช้ร่วมกันมานาน


นั่นเป็นความผิดพลาดของฉันฉันแม้ว่า LD_LIBRARY_PATH ว่าเป็นผลิตภัณฑ์ldconfigของการทำงาน ในขณะเดียวกันก็เป็นอินพุตของ ldconfig /etc/ld.so.confควบคู่กับไฟล์ใน
calavera.info

1
ความรู้สึกของฉันคือที่ldconfigไม่ได้ใช้$LD_LIBRARY_PATH(ซึ่งจะใช้ในld-linux.soเวลาเท่านั้น)
Basile Starynkevitch

3
@ calavera.info มันไม่ใช่ dynamic linker ใช้LD_LIBRARY_PATH พร้อมกับเอาต์พุตของldconfigat runtime ค่าใช้มิได้เปลี่ยนแปลงldconfig LD_LIBRARY_PATH
ฮอบส์

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