Cài đặt nhiều phiên bản của thư viện dùng chung


1

Tôi đang chạy Ubuntu 10.04 và tôi muốn sử dụng tmux 1.6. tmux có một sự phụ thuộc vào libevent 2.

Giải pháp của tôi là biên dịch libevent2 và thả vào /usr/local/lib sau đó biên dịch tmux chống lại lib này và thả vào /usr/local/bin. Điều này hoạt động tuyệt vời cho đến khi ... tôi khởi động lại. Đây chỉ là một giả định về phía tôi nhưng có vẻ như các nhị phân khác hiện đang liên kết với thư viện libevent2 có lẽ là do nó nằm trên đường dẫn thư viện. Bởi vì có hơn 60 gói với phụ thuộc libevent1, điều này khiến cho cài đặt của tôi về cơ bản mất đi lý trí.

Có một cách thành ngữ để tiếp cận việc chạy một ứng dụng có sự phụ thuộc thư viện cốt lõi vào một phiên bản khác không? Tôi có nên chỉ tĩnh liên kết lib?


Kiểm tra xem chuyện gì đang xảy ra với ldd. Ở đâu đó, bạn có một liên kết tượng trưng xấu hoặc một tập tin sai tên. Các chương trình yêu cầu libevent2 nên tham khảo libevent-2.
David Schwartz

Câu trả lời:


0

http://www.ibm.com/developerworks/linux/l Library / l-lpic1-v3-102-3 / đề nghị

Đang tải thư viện cụ thể

Nếu bạn đang chạy một ứng dụng cũ hơn   cần một phiên bản cũ hơn của thư viện dùng chung hoặc nếu bạn   phát triển thư viện chia sẻ mới hoặc phiên bản của thư viện dùng chung, bạn   có thể muốn ghi đè các đường dẫn tìm kiếm mặc định được sử dụng bởi trình tải.   Điều này cũng có thể cần thiết bởi các tập lệnh sử dụng chia sẻ sản phẩm cụ thể   các thư viện có thể được cài đặt trong cây / opt. Giống như bạn có thể thiết lập   biến PATH để chỉ định đường dẫn tìm kiếm cho các tệp thực thi, bạn có thể   đặt biến LD_LIBRARY_PATH thành danh sách được phân tách bằng dấu hai chấm   thư mục nên được tìm kiếm cho các thư viện chia sẻ trước khi   những hệ thống được chỉ định trong ld.so.cache. Ví dụ: bạn có thể sử dụng một   lệnh như:

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

Bài viết được liên kết để minh họa cách sử dụng ldd để tìm hiểu các thư viện mà chương trình phụ thuộc vào.


0

Các chương trình nhị phân được biên dịch thường liên kết với /usr/lib/libXXX.so.1.2.3

Nếu bạn sử dụng một phiên bản mới cụ thể, bạn có thể thả nó vào /usr/lib/libXXX.so.3.4.5 và chương trình mới được tạo của bạn nên liên kết với điều này.

Bạn thực sự có thể kiểm tra xem các chương trình cũ hiện có liên kết với lib mới hay không ldd /path/to/program.

Nếu điều này thực sự xảy ra, bạn có thể:

  • đặt lib mới vào một thư mục riêng /special/path/lib
  • khởi chạy chương trình đặc biệt của bạn với tập lệnh shell shell, bộ đó LD_LIBRARY_PATH=/special/path/lib:$LD_LIBRARY_PATH và sau đó khởi chạy nhị phân hoặc
  • nếu bạn tự biên dịch chương trình của mình, bạn có thể vượt qua LDFLAGS=-Wl,-rpath,/special/path/lib, điều này mã hóa đường dẫn tìm kiếm lib đặc biệt vào chương trình của bạn (tốt vì hoạt động mà không có tập lệnh bao bọc)
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.