Các chia sẻ HOWTO thư viện giải thích hầu hết các cơ chế liên quan, và các bộ nạp thủ công động đi vào chi tiết hơn. Mỗi biến thể unix có cách riêng, nhưng hầu hết sử dụng cùng định dạng thực thi ( ELF ) và có các trình liên kết động tương tự (có nguồn gốc từ Solaris). Dưới đây tôi sẽ tóm tắt các hành vi phổ biến với trọng tâm là Linux; kiểm tra hướng dẫn sử dụng hệ thống của bạn để biết câu chuyện hoàn chỉnh.
Tóm lại, khi tìm kiếm một thư viện động ( .sotệp), trình liên kết sẽ thử:
- các thư mục được liệt kê trong
LD_LIBRARY_PATHbiến môi trường ( DYLD_LIBRARY_PATHtrên OSX);
- các thư mục được liệt kê trong rpath thực thi ;
- các thư mục trên đường dẫn tìm kiếm hệ thống, mà (ít nhất là trên Linux) bao gồm các mục
/etc/ld.so.confcộng /libvà /usr/lib.
Đường dẫn được lưu trữ trong tệp thực thi ( thuộc tính động DT_RPATHhoặc DT_RUNPATHthuộc tính động). Nó có thể chứa các đường dẫn hoặc đường dẫn tuyệt đối bắt đầu $ORIGINđể chỉ ra một đường dẫn liên quan đến vị trí của tệp thực thi (ví dụ: nếu tệp thực thi nằm trong /opt/myapp/binvà đường dẫn của nó là $ORIGIN/../lib:$ORIGIN/../pluginsthì trình liên kết động sẽ nhìn vào /opt/myapp/libvà /opt/myapp/plugins). Thông thường rpath được xác định khi thực thi được biên dịch, với -rpathtùy chọn này ld, nhưng bạn có thể thay đổi nó sau đó chrpath.
Trong kịch bản mà bạn mô tả, nếu bạn là nhà phát triển hoặc đóng gói của ứng dụng và có ý định cho nó được cài đặt trong một …/bin, …/libkết cấu, sau đó liên kết với -rpath='$ORIGIN/../lib'. Nếu bạn đang cài đặt nhị phân dựng sẵn trên hệ thống của mình, hãy đặt thư viện vào một thư mục trên đường dẫn tìm kiếm ( /usr/local/libnếu bạn là quản trị viên hệ thống, nếu không là thư mục bạn thêm vào $LD_LIBRARY_PATH) hoặc thử chrpath.
/lib64và/usr/lib64được sử dụng cho các nhị phân 64 bit/libvà/usr/libđược sử dụng cho các nhị phân 32 bit.