Tôi có một tệp thực thi nhị phân có tên là "alpha" yêu cầu thư viện được liên kết (libz.so.1.2.7) được đặt tại /home/username/myproduct/lib/libz.so.1.2.7
Tôi xuất tương tự sang phiên bản đầu cuối của mình trước khi sinh ra tệp thực thi nhị phân của mình bằng cách thực hiện lệnh sau.
export LD_LIBRARY_PATH=/home/username/myproduct/lib/:$LD_LIBRARY_PATH
Bây giờ, khi tôi sinh ra một ứng dụng "bravo" khác yêu cầu cùng một thư viện nhưng phiên bản khác nhau, tức là (libz.so.1.2.8) có sẵn
/lib/x86_64-linux-gnu/libz.so.1.2.8
, hệ thống sẽ đưa ra lỗi sau.
version `ZLIB_1.2.3.3' not found (required by /usr/lib/x86_64-linux-gnu/libxml2.so.2)
Nếu tôi bỏ đặt LD_LIBRARY_PATH
, "bravo" sẽ khởi động tốt. Tôi hiểu rằng hành vi trên là do LD_LIBRARY_PATH
được ưu tiên hơn các đường dẫn thư mục được xác định trong /etc/ld.so.conf
khi tìm kiếm các thư viện được liên kết và do đó đã xảy ra lỗi ở trên. Tôi chỉ tò mò về lý do tại sao các nhà phát triển UNIX / LINUX không thiết kế HĐH để tìm kiếm các thư viện được liên kết trong các thư mục khác theo phân cấp nếu phiên bản đầu tiên của thư viện là phiên bản khác nhau.
Nói một cách đơn giản, các hệ thống UNIX / LINUX đi qua một tập các thư mục cho đến khi tìm thấy thư viện cần thiết. Nhưng tại sao nó không làm như vậy cho đến khi tìm thấy phiên bản dự kiến thay vì chấp nhận phiên bản đầu tiên của thư viện không phân biệt phiên bản của nó?
libz.so.1
là một liên kết đếnlibz.so.1.2.8