การติดตั้งไลบรารี่ที่แชร์หลายเวอร์ชัน


1

ฉันใช้ Ubuntu 10.04 และฉันต้องการใช้ tmux 1.6 tmux มีการพึ่งพา libevent 2

วิธีการแก้ปัญหาของฉันคือการรวบรวม libevent2 และวางลงใน/usr/local/libคอมไพล์แล้ว tmux กับ lib /usr/local/binนี้และวางลงใน มันใช้งานได้ดีจนกระทั่ง ... ฉันเริ่มต้นใหม่ นี่เป็นเพียงข้อสันนิษฐานในส่วนของฉัน แต่ดูเหมือนว่าไบนารีอื่น ๆ กำลังเชื่อมโยงไปยังไลบรารี libevent2 อย่างน่าจะเป็นเพราะมันอยู่บนเส้นทางของไลบรารี เนื่องจากมีแพ็คเกจมากกว่า 60 แพคเกจที่มีการพึ่งพา libevent1 ทำให้การติดตั้งของฉันเสียความรู้สึก

มีวิธีการใช้งานแอพพลิเคชั่นที่มีการพึ่งพาไลบรารี่หลักในเวอร์ชั่นอื่นหรือไม่? ฉันควรเชื่อมโยง lib แบบคงที่หรือไม่


lddตรวจสอบสิ่งที่เกิดขึ้นกับ บางแห่งคุณมีลิงก์สัญลักษณ์ที่ไม่ดีหรือไฟล์ผิด โปรแกรมที่ต้องการ libevent2 ควรอ้างอิงถึง libevent-2
David Schwartz

คำตอบ:


0

http://www.ibm.com/developerworks/linux/library/l-lpic1-v3-102-3/แนะนำ

กำลังโหลดไลบรารีเฉพาะ

หากคุณใช้แอปพลิเคชันรุ่นเก่าที่ต้องการไลบรารีที่ใช้ร่วมกันรุ่นเก่าโดยเฉพาะหรือถ้าคุณกำลังพัฒนาไลบรารีที่ใช้ร่วมกันใหม่หรือรุ่นของไลบรารีที่แชร์คุณอาจต้องการแทนที่เส้นทางการค้นหาเริ่มต้นที่ใช้โดยตัวโหลด สคริปต์นี้อาจจำเป็นต้องใช้ซึ่งใช้ไลบรารีที่แบ่งใช้เฉพาะผลิตภัณฑ์ที่อาจติดตั้งใน / opt ต้นไม้ เช่นเดียวกับที่คุณสามารถตั้งค่าตัวแปร PATH เพื่อระบุพา ธ การค้นหาสำหรับไฟล์ประมวลผลคุณสามารถตั้งค่าตัวแปร LD_LIBRARY_PATH เป็นรายการไดเร็กทอรีที่คั่นด้วยโคลอนซึ่งควรค้นหาไลบรารีที่ใช้ร่วมกันก่อนระบบที่ระบุใน ld.so.cache ตัวอย่างเช่นคุณอาจใช้คำสั่งเช่น:

export LD_LIBRARY_PATH=/usr/lib/oldstuff:/opt/IBM/AgentController/lib

บทความที่เชื่อมโยงเพื่อแสดงวิธีการใช้ ldd เพื่อค้นหาว่าไลบรารีใดบ้างที่โปรแกรมใช้


0

โปรแกรมไบนารีที่คอมไพล์มักเชื่อมโยงกับ /usr/lib/libXXX.so.1.2.3

หากคุณใช้รุ่นใหม่ที่เฉพาะเจาะจงคุณสามารถวางใน/usr/lib/libXXX.so.3.4.5 และโปรแกรมที่สร้างขึ้นใหม่ของคุณควรเชื่อมโยงกับเรื่องนี้

จริงๆคุณสามารถตรวจสอบว่าโปรแกรมเก่าตอนนี้เชื่อมโยงกับ lib ldd /path/to/programใหม่ด้วย

หากสิ่งนี้เกิดขึ้นจริงคุณสามารถ:

  • ใส่ lib ใหม่ลงในไดเรกทอรีแยก/special/path/libและ
  • เรียกใช้โปรแกรมพิเศษของคุณด้วย wrapper shell script ที่ตั้งค่า LD_LIBRARY_PATH=/special/path/lib:$LD_LIBRARY_PATH จากนั้นเรียกใช้ไบนารีหรือ
  • ถ้าคุณคอมไพล์โปรแกรมด้วยตัวคุณเองคุณอาจผ่านLDFLAGS=-Wl,-rpath,/special/path/lib, hardcodes นี้เป็นพา ธ การค้นหาสำหรับ lib พิเศษในโปรแกรมของคุณ (ดีเพราะทำงานได้โดยไม่ต้องใช้สคริปต์ wrapper)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.