Tôi có một ứng dụng được chia thành nhiều thư viện để phục vụ cho việc tái sử dụng mã. Trên Windows tất cả tôi phải làm là đặt các tập tin .dll trong cùng một đường dẫn như thực thi và nó sẽ tự động tìm thấy chúng. Trên Linux (vì nó mã hóa đường dẫn đến mọi thứ), tôi phải chỉ định biến môi trường LD_LIBRARY_PATH
hoặc tải trước các thư viện trước khi thực thi.Đường dẫn Thư viện được chia sẻ làm Thư mục thực thi
Tôi đã nhìn thấy một số điều về cách nhúng đường dẫn bằng tùy chọn trình liên kết của -Wl,-rpath=<PATH>
và tôi đã thử sử dụng đường dẫn này .
. Nhưng điều đó chỉ nhìn vào thư mục làm việc hiện tại, không phải thư mục thực thi.
Có cách nào để chỉ định trong trình liên kết để xem trong thư mục của tệp thực thi cho các thư viện được chia sẻ theo mặc định (như trên Windows) không?
Cảm ơn! Matt
Khi sử dụng $ ORIGIN, bạn cần đảm bảo rằng $ được trích dẫn đúng cách để trình liên kết thực sự nhìn thấy nó. Từ dòng lệnh, bạn muốn "-rpath \ $ ORIGIN" và từ Makefile bạn muốn "-rpath \ $$ ORIGIN" –
Tôi đang sử dụng Eclipse và CDT, và tôi đang đặt tùy chọn trong các cờ liên kết linh tinh. Tôi đang đặt '-Wl, -rpath = $$ ORIGIN' và trong cửa sổ đầu ra nó hiển thị nó với một $ duy nhất. Nhưng nó dường như không hoạt động. Tôi đã thử một số biến thể, nhưng không có gì xảy ra. Nó giống như mối liên kết chỉ bỏ qua lá cờ. Tôi đã thử: -Wl, -rpath = $ ORIGIN -Wl, - rpath = $ ORIGIN -Wl, -rpath =/$ ORIGIN -Wl, -rpath = $ ORIGIN/ -Wl, -rpath =/$ ORIGIN/ v.v. – CuppM
Sử dụng elfdump hoặc tương đương cục bộ để xem nội dung trong đó? Sử dụng ldd và xem những gì nó nói? – bmargulies