Có phải bình thường là biến LD_LIBRARY_PATH bị thiếu trong một môi trường không?


15

Tôi đã tìm thấy một sự trùng hợp ngẫu nhiên rằng trên Debian Jessie của tôi không có LD_LIBRARY_PATHbiến số (chính xác là printenv | grep LDhiển thị không có gì liên quan đến trình liên kết và echo "$LD_LIBRARY_PATH"hiển thị cũng không có gì).

Đây là trường hợp trong trình giả lập thiết bị đầu cuối x ( có thể xóa nó do setgid ) cũng như trong thiết bị đầu cuối cơ bản ( Ctrl+Alt+F1).

Tôi biết điều đó LD_LIBRARY_PATH có thể bị coi là xấu nên Debian có thể chặn nó bằng cách nào đó, nhưng mặt khác, có một vài tệp trong /etc/ld.so.conf.d/đó có chứa một số thư mục được thêm vào LD_LIBRARY_PATH. Không có tập tin RC nào của tôi (mà tôi biết) lộn xộn với LD_LIBRARY_PATHmột trong hai.

Tại sao tôi không thấy một LD_LIBRARY_PATHbiến?

Câu trả lời:


22

Vâng, đó là bình thường mà bạn không có bất kỳ rõ ràng LD_LIBRARY_PATH. Đọc thêm ldconfig (8)ld-linux (8) và về đường dẫn . Lưu ý rằng ldconfigcập nhật /etc/ld.so.cache, không phải LD_LIBRARY_PATH. Đôi khi, bạn sẽ thiết lập đường dẫn của một tệp thực thi rõ ràng với -Wl,-rpath,thư mục được chuyển đến gcctại thời điểm liên kết.

Nếu bạn cần một LD_LIBRARY_PATH(nhưng có lẽ bạn không nên), hãy tự đặt nó (ví dụ: trong ~/.bashrc).

Nếu bạn cần thiết lập rộng hệ thống, bạn có thể ví dụ như hãy xem xét thêm /usr/local/lib/trong /etc/ld.so.confvà chạy ldconfigsau khi cài đặt của tất cả các thư viện đó.

AFAIK $LD_LIBRARY_PATHchỉ được sử dụng bởi trình liên kết động ld-linux.so(và bởi dlopen (3) sử dụng nó) sau khi thực hiện (2) . Xem thêm ldd (1) .

Đọc Làm thế nào để viết thư viện chia sẻ để biết thêm.


Đó là sai lầm của tôi, mặc dù LD_LIBRARY_PATH là sản phẩm của hoạt động ldconfig. Trong khi đó, nó là đầu vào của ldconfig cùng với các tệp trong /etc/ld.so.conf.
calavera.info

1
Cảm giác của tôi là ldconfigkhông sử dụng $LD_LIBRARY_PATH(chỉ được sử dụng vào ld-linux.sothời gian)
Basile Starynkevitch

3
@ calavera.info cũng không. Trình liên kết động sử dụng LD_LIBRARY_PATH cùng với đầu ra của ldconfiglúc chạy. ldconfigkhông sử dụng cũng không thay đổi LD_LIBRARY_PATH.
hobbs

Bây giờ tôi có thể thấy rằng tôi đã làm nó hoàn toàn rối tung, có lẽ bằng cách dành quá nhiều thời gian cho Java, trong đó "classpath" là ảo cấu hình duy nhất của liên kết động. Bây giờ mọi thứ dường như đã rõ ràng, cảm ơn rất nhiều.
calavera.info
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.