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 หายไปไฟล์ปัญหาหายไปแล้ว