คำถามติดแท็ก ld

2
การได้รับข้อความ“ ไม่พบ” เมื่อเรียกใช้ไบนารีแบบ 32 บิตบนระบบ 64 บิต
ขณะนี้ฉันมีปัญหาแปลก ๆ เกี่ยวกับเดเบียน (เสียงฮืด ๆ / amd64) ฉันได้สร้าง chroot เพื่อติดตั้งเซิร์ฟเวอร์ (ฉันไม่สามารถให้รายละเอียดเพิ่มเติมเกี่ยวกับมันขอโทษ) /chr_path/ขอเรียกเส้นทางของมัน เพื่อทำให้สิ่งต่าง ๆ เป็นเรื่องง่ายฉันได้เริ่มต้น chroot นี้ด้วย debootstrap (เช่น wheezy / amd64) ทั้งหมดดูเหมือนจะทำงานได้ดีภายใน chroot แต่เมื่อฉันเริ่มสคริปต์การติดตั้งของเซิร์ฟเวอร์ของฉันฉันได้รับ: zsh: Not found /some_path/perl(โปรแกรมติดตั้งมีไบนารี Perl ด้วยเหตุผลบางอย่าง) โดยปกติฉันตรวจสอบ/some_path/สถานที่และพบไบนารี "perl" fileในสภาพแวดล้อม chroot ส่งคืน: /some_path/perl ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked (uses shared …

1
เหตุใดจึงไม่ระบบ Unix / Linux ทราเวิร์ผ่านไดเรกทอรีจนกว่าพวกเขาจะพบรุ่นที่ต้องการของห้องสมุดที่เชื่อมโยง?
ฉันมีไบนารีปฏิบัติการที่ชื่อว่า "alpha" ที่ต้องการไลบรารีที่เชื่อมโยง (libz.so.1.2.7) ซึ่งวางไว้ที่ /home/username/myproduct/lib/libz.so.1.2.7 ฉันส่งออกไปยังอินสแตนซ์ของเทอร์มินัลของฉันก่อนที่จะวางไข่ไบนารีที่ปฏิบัติการได้ของฉันโดยดำเนินการคำสั่งต่อไปนี้ export LD_LIBRARY_PATH=/home/username/myproduct/lib/:$LD_LIBRARY_PATH ตอนนี้เมื่อฉันวางไข่แอปพลิเคชั่น "ไชโย" อื่นที่ต้องใช้ไลบรารีเดียวกัน แต่เป็นเวอร์ชั่นที่แตกต่างกันคือ (libz.so.1.2.8) ซึ่งมีอยู่ใน /lib/x86_64-linux-gnu/libz.so.1.2.8ระบบระบบจะพ่นข้อผิดพลาดต่อไปนี้ version `ZLIB_1.2.3.3' not found (required by /usr/lib/x86_64-linux-gnu/libxml2.so.2) หากฉันยกเลิกการตั้งค่าLD_LIBRARY_PATH"ไชโย" จะเริ่มต้นได้ดี ฉันเข้าใจว่าพฤติกรรมดังกล่าวเป็นเพราะLD_LIBRARY_PATHมีความสำคัญเหนือเส้นทางไดเรกทอรีที่กำหนดใน/etc/ld.so.confขณะที่ค้นหาห้องสมุดที่เชื่อมโยงและดังนั้นข้อผิดพลาดดังกล่าวเกิดขึ้น ฉันแค่อยากรู้ว่าทำไมนักพัฒนาของ UNIX / LINUX จึงไม่ได้ออกแบบระบบปฏิบัติการเพื่อค้นหาไลบรารี่ที่เชื่อมโยงในไดเรกทอรีอื่นตามลำดับชั้นหากอินสแตนซ์แรกของไลบรารี่เป็นเวอร์ชันที่แตกต่างกัน พูดง่ายๆก็คือระบบ UNIX / LINUX จะผ่านกลุ่มของไดเรกทอรีต่างๆจนกว่าจะพบไลบรารีที่ต้องการ แต่ทำไมมันไม่ทำอย่างนั้นจนกว่ามันจะพบกับเวอร์ชั่นที่คาดหวังมากกว่าจะยอมรับอินสแตนซ์แรกของไลบรารี่โดยไม่คำนึงถึงเวอร์ชันของมัน?

1
เป็นเรื่องปกติที่ตัวแปร LD_LIBRARY_PATH หายไปจากสภาพแวดล้อมหรือไม่
ฉันพบโดยบังเอิญว่าใน 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ตัวแปร?

3
ค้นหาว่าห้องสมุดอยู่ในเส้นทางหรือไม่
สมมติว่าฉันต้องการทดสอบว่ามีการติดตั้งไลบรารีและใช้งานได้โดยโปรแกรมหรือไม่ ฉันสามารถใช้ldconfig -p | grep mylibเพื่อดูว่ามีการติดตั้งในระบบหรือไม่ แต่ถ้าห้องสมุดเป็นที่รู้จักกันเพียงผ่านการตั้งค่าLD_LIBRARY_PATH? ในกรณีนั้นโปรแกรมอาจหาห้องสมุดได้ แต่ldconfigจะไม่ทำเช่นนั้น ฉันจะตรวจสอบว่าห้องสมุดอยู่ในเส้นทางลิงเกอร์รวมกันได้อย่างไร ฉันจะเพิ่มว่าฉันกำลังมองหาวิธีการแก้ปัญหาที่จะทำงานแม้ว่าฉันจะไม่ได้มีโปรแกรมที่อยู่ในมือ (เช่นโปรแกรมยังไม่ได้รวบรวม) ฉันแค่อยากจะรู้ว่ามีห้องสมุดอยู่ในld' เส้นทางของ
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.