Trang này - http://labs.qt.nokia.com/2011/10/28/rpath-and-runpath/ - nói về trình tự khám thư viện trong ld.so:sử dụng RPATH chứ không phải RUNPATH?
Unless loading object has RUNPATH:
RPATH of the loading object,
then the RPATH of its loader (unless it has a RUNPATH), ...,
until the end of the chain, which is either the executable
or an object loaded by dlopen
Unless executable has RUNPATH:
RPATH of the executable
LD_LIBRARY_PATH
RUNPATH of the loading object
ld.so.cache
default dirs
Và sau đó đề nghị:
Khi bạn gửi mã nhị phân, hoặc sử dụng rPath và không RUNPATH hoặc đảm bảo LD_LIBRARY_PATH được đặt trước khi chúng được chạy.
Vì vậy, sử dụng RPATH
với RUNPATH
là xấu vì RUNPATH
loại-of hủy RPATH
nạp năng động để gián tiếp không hoạt động như mong đợi? Nhưng tại sao sau đó RPATH
bị phản đối vì lợi ích của RUNPATH
?
Ai đó có thể giải thích tình huống này không?
vấn đề là, RUNPATH được đề xuất trên RPATH và RPATH không được dùng nữa, nhưng RUNPATH hiện không được tất cả các hệ thống hỗ trợ. vì vậy những gì tôi làm ** ngày hôm nay ** để làm cho ứng dụng hoạt động? như hiển thị bài viết Qt, khi sử dụng các plugin, bạn nên sử dụng RPATH nhiều hơn RUNPATH. Vì vậy, toàn bộ tình huống rất khó hiểu ở đây – zaharpopov
@zaharpopov, Cách tiếp cận tốt nhất tôi khuyên bạn nên làm là tạo ra các ứng dụng được tích hợp độc đáo trong nền tảng đích, bao gồm cả những thứ khác, không phân phối các phiên bản cạnh tranh của nền tảng thư viện được chia sẻ *. Tôi nghĩ rằng đây là gốc rễ của vấn đề và hacks và slashes xung quanh 'DT_RPATH' và bạn bè là một nỗ lực ill-hướng cố gắng để phụ bước vấn đề thay vì giải quyết nó. – chill
điều này không đơn giản. với vấn đề Qt là ứng dụng muốn phiên bản mới hơn của lib Qt hơn tồn tại trên hệ thống. một số hệ thống đã lỗi thời Qt SOs, vậy bạn sẽ làm gì sau đó? tôi nghĩ nó có ý nghĩa khi phân phối các SO Qt với bạn nếu bạn cần một phiên bản cụ thể – zaharpopov