find | grep libc.so.6
แสดงให้เห็นว่ามันมีอยู่ใน/lib/i386-linux-gnu/libc.so.6แต่สคริปต์ที่ฉันเรียกใช้มันคาดว่าจะอยู่ภายใต้โดยตรง/libดังนั้นทำไมไม่มีอย่างน้อย symlink?
ฉันจะเสี่ยงทำลายสิ่งใดหรือไม่ถ้าฉันวาง symlink ที่นั่น
find | grep libc.so.6
แสดงให้เห็นว่ามันมีอยู่ใน/lib/i386-linux-gnu/libc.so.6แต่สคริปต์ที่ฉันเรียกใช้มันคาดว่าจะอยู่ภายใต้โดยตรง/libดังนั้นทำไมไม่มีอย่างน้อย symlink?
ฉันจะเสี่ยงทำลายสิ่งใดหรือไม่ถ้าฉันวาง symlink ที่นั่น
คำตอบ:
libc.soถูกย้ายไปเป็นส่วนหนึ่งของmultiarch work ใน Ubuntu 11.04 เหตุผลที่ไม่สามารถมี symlink ได้นั่นคือจุดประสงค์ของ multiarch คือเพื่อให้สามารถติดตั้งทั้งสองi386และamd64รุ่นlibcในเวลาเดียวกันเพื่อให้คุณสามารถเรียกใช้ไบนารีแบบ 32 บิตได้ง่ายขึ้นบนระบบ 64 บิตและ ในทางกลับกัน (และสถานการณ์อื่นที่คล้ายคลึงกัน) หากlibc6แพ็กเกจมี symlink ไปยังตำแหน่งใหม่เวอร์ชันของแพ็กเกจนั้นสำหรับสถาปัตยกรรมที่แตกต่างกันจะไม่สามารถติดตั้งได้ทั้งสองในเวลาเดียวกัน (เวอร์ชันของ symlink ใดที่จะdpkgเลือก?) เอาชนะจุดทั้งการฝึก
ทุกสิ่งที่ฮาร์ดโค้ดพา ธlibc.soต้องได้รับการอัปเดตเพื่อให้ทำงานได้อย่างถูกต้องจาก Ubuntu 11.04 เป็นต้นไป หากสคริปต์ที่คุณพูดถึงเป็นส่วนหนึ่งของ Ubuntu โปรดรายงานข้อผิดพลาดและเพิ่มmultiarchแท็ก
/lib/libc.so.6เป็นห้องสมุด 32 หรือ 64 บิต
ไลบรารีแบบไดนามิกถูกโหลดโดยเคอร์เนลพา ธ ไม่ได้ฮาร์ดโค้ดในโปรแกรม โปรแกรมเพิ่งบอกว่า "ฉันต้องการ libc.so.6" จากนั้นระบบจะค้นหาในเส้นทางห้องสมุดตามที่กำหนดไว้/etc/ld.so.confรวมถึง/usr/libและเป็น/libค่าเริ่มต้น /etc/ld.so.conf.dไฟล์นี้จะมีแฟ้มการกำหนดค่าเพิ่มเติมใน
บนระบบ 64 บิตของฉัน libc.so.6สามารถพบได้/lib/x86_64-linux-gnu/libc.so.6เพราะเส้นทางที่กำหนดไว้ใน/etc/ld.so.conf.d/x86_64-linux-gnu.conf:
# Multiarch support
/lib/x86_64-linux-gnu
/usr/lib/x86_64-linux-gnu
หากต้องการทราบว่าโปรแกรมใดที่ห้องสมุดโหลดโดยใช้lddในldd /bin/bash:
linux-vdso.so.1 => (0x00007ffff1dff000)
libncurses.so.5 => /lib/libncurses.so.5 (0x00007f9d8b3b8000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f9d8b1b4000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f9d8ae1f000)
/lib64/ld-linux-x86-64.so.2 (0x00007f9d8b61c000)
การวาง symlink จะไม่ทำให้อะไรเสียหาย
ในการรับรายการไดเรกทอรีที่ค้นหาให้เรียกใช้:
ldconfig -v -N | grep '^/'
-vทำให้รายการของไฟล์ + ไดเรกทอรีถูกแสดง-Nป้องกันแคช ( /etc/ld.so.cache) ไม่ให้ถูกสร้างขึ้นใหม่
/usr/local/libบรารี่ที่ติดตั้งแต่มันทำงานได้ดีถ้าฉันสร้าง symlink /usr/libอะไรเป็นสาเหตุของพฤติกรรมนี้
ldconfig -v -N | grep '^/'?
เพียงเพิ่ม symlink ไปยังไฟล์ libc.so.6 ดังต่อไปนี้:
sudo ln -s /lib/i386-linux-gnu/libc.so.6 /lib/libc.so.6
เช่นเดียวกันสำหรับไฟล์ที่หายไปอื่น ๆ ที่ยังอยู่ในระบบในกรณีของฉัน Matlab หายไปไฟล์ปัญหาหายไปแล้ว