- LD_LIBRARY_PATH cho trình tải động biết nơi tìm kiếm các thư viện chia sẻ thay vì trong các đường dẫn hệ thống tiêu chuẩn.
- Việc sử dụng rộng rãi trên toàn cầu có thể dẫn đến các lỗ hổng bảo mật, suy giảm hiệu năng và các vấn đề không tương thích khó khắc phục.
- Tốt hơn hết là nên sử dụng các phương án thay thế như -rpath, LD_RUN_PATH hoặc các tập lệnh bao bọc để hạn chế tác động đến các ứng dụng cụ thể.
- Việc chỉ định LD_LIBRARY_PATH trong các thử nghiệm cụ thể hoặc môi trường được kiểm soát sẽ tránh được các phụ thuộc ẩn và hành vi khó lường.

LD_LIBRARY_PATH Đây là một trong những biến môi trường Linux mà ai cũng sẽ gặp sớm muộn, nhưng rất ít người hiểu rõ về nó, và trên hết, nó thường bị sử dụng sai cách. Khi bạn bắt đầu gặp khó khăn với các thư viện dùng chung, các tệp thực thi không khởi động được, hoặc các ứng dụng cần thư viện riêng, cái tên này sẽ xuất hiện hết lần này đến lần khác.
Trong bài viết này chúng ta sẽ thấy LD_LIBRARY_PATH là gì và trình tải động hoạt động như thế nào bên trong?Chúng ta sẽ cùng tìm hiểu khi nào nên sử dụng biến này và khi nào nên tránh sử dụng nó. Chúng ta sẽ xem xét các ví dụ thực tế trên các bản phân phối tương tự Ubuntu (mặc dù nó có thể áp dụng cho hầu hết mọi bản phân phối), giải thích cách cấu hình đúng cách, và cũng xem xét các giải pháp thay thế sạch sẽ và an toàn hơn nhiều so với việc liên tục sử dụng biến này trong hồ sơ người dùng của bạn.
LD_LIBRARY_PATH là gì và nó thực sự được sử dụng để làm gì?

Trong các hệ thống GNU/Linux hiện đại, hầu hết các chương trình đều liên kết với thư viện chia sẻ (Các tệp .so) được tải vào bộ nhớ khi bạn khởi chạy tệp thực thi. Thành phần chịu trách nhiệm tìm các thư viện này trong thời gian chạy là... bộ sạc động (thông thường ld.so hoặc các biến thể như ld-linux-x86-64.so.2 (theo kiến trúc).
Biến môi trường LD_LIBRARY_PATH định nghĩa một danh sách các thư mục. Nơi trình tải động sẽ tìm kiếm các thư viện chia sẻ đó khi một chương trình khởi chạy. Đó là một danh sách được phân tách bằng dấu hai chấm, đại loại như... /ruta/uno:/ruta/dos:/otra/rutavà nó được tham khảo trước các tuyến đường tiêu chuẩn của hệ thống như /lib o /usr/lib.
Điều này có nghĩa là nếu một thư viện trong LD_LIBRARY_PATH có cùng tên với một thư viện khác nằm trong thư mục hệ thống, Trình tải sẽ ưu tiên thư viện nằm trong LD_LIBRARY_PATH.Đó chính xác là nơi sức mạnh nằm ở đó... và cũng là nguồn gốc của nhiều vấn đề nếu sử dụng không cẩn trọng.
Cơ chế này đặc biệt hữu ích khi bạn làm việc với đường dẫn thư viện không chuẩnVí dụ, các môi trường kiểu Nix, cài đặt trong thư mục người dùng, các phiên bản thư viện tùy chỉnh hoặc các ứng dụng được đóng gói với các phụ thuộc riêng mà không muốn sử dụng thư viện hệ thống.
Các trường hợp sử dụng điển hình cho LD_LIBRARY_PATH

Việc sử dụng LD_LIBRARY_PATH có ý nghĩa trong các kịch bản rất cụ thể và được kiểm soátNếu bạn chỉ sử dụng những trường hợp này, nó sẽ là một công cụ rất hữu ích; nhưng nếu bạn biến nó thành giải pháp mặc định cho mọi việc, sớm muộn gì bạn cũng sẽ gặp rắc rối.
Một trong những công dụng phổ biến nhất là để thử phiên bản mới của thư viện dùng chung So sánh với một ứng dụng đã được biên dịch sẵn, mà không cần động đến các thư viện hệ thống. Ví dụ, nếu bạn đã tạo một phiên bản phát triển của libmylib.so Trong thư mục chính của bạn, bạn có thể điều chỉnh LD_LIBRARY_PATH để chỉ phiên kiểm thử của bạn sử dụng nó.
Một trường hợp rất phổ biến khác là... Di chuyển thư viện để bảo tồn các phiên bản cũ hơn.Hãy tưởng tượng bạn muốn giữ lại một phiên bản cũ hơn của thư viện cho một ứng dụng cũ, trong khi phần còn lại của hệ thống sử dụng phiên bản mới hơn; với LD_LIBRARY_PATH, bạn có thể chỉ định ứng dụng cụ thể đó đến thư mục nơi bạn lưu trữ phiên bản cũ hơn.
Nó cũng được sử dụng khá nhiều để cưỡi ngựa. môi trường khép kín và có thể di dời Trong các ứng dụng lớn, nhà cung cấp đóng gói các thư viện của riêng họ vào một thư mục, mà không dựa vào các thư viện hệ thống. Trong những trường hợp này, thường có một tập lệnh khởi động điều chỉnh LD_LIBRARY_PATH để ứng dụng luôn tải các tệp .so của riêng nó.
Trong tất cả các trường hợp này, điểm mấu chốt là LD_LIBRARY_PATH được sử dụng trong một hạn chế và đúng giờNó được liên kết với một ứng dụng cụ thể hoặc môi trường thử nghiệm, chứ không phải là một biến toàn cục ảnh hưởng đến mọi thứ người dùng chạy hoặc toàn bộ hệ thống.
Hướng dẫn cấu hình LD_LIBRARY_PATH trong Linux từng bước một

Dù biết rõ rủi ro, bạn vẫn muốn Hãy định nghĩa biến môi trường LD_LIBRARY_PATH trong môi trường người dùng của bạn.Trong các bản phân phối như Ubuntu, việc chỉnh sửa tệp tin là khá phổ biến. ~/.bashrc (Giả sử bạn sử dụng Bash làm shell mặc định). Đó là tập tin chạy mỗi khi bạn mở một cửa sổ terminal tương tác mới.
Để bắt đầu, hãy mở tệp Chỉnh sửa tệp .bashrc bằng trình soạn thảo yêu thích của bạn.Nó được sử dụng trong nhiều bài hướng dẫn. nano Để đơn giản, nhưng bạn cũng có thể làm tương tự với vi, vim hoặc bất kỳ trình soạn thảo văn bản nào:
nano ~ / .bashrc
Sau khi mở ra, bạn phải thêm dòng xuất khẩu Thiết lập biến. Điều quan trọng ở đây là không được để khoảng trắng xung quanh dấu bằng, nếu không Bash sẽ hiểu sai. Một ví dụ đúng sẽ là:
export LD_LIBRARY_PATH=/home/osboxes/mukul
Trong trường hợp này, chúng ta đang thông báo cho hệ thống rằng, khi tìm kiếm các thư viện dùng chung, hệ thống nên xem xét đến thư mục. /home/osboxes/mukul Trước các thư mục chuẩn. Bạn có thể thay thế nó bằng đường dẫn đến các tệp .so tùy chỉnh hoặc thư viện bạn muốn sử dụng.
Sau khi lưu các thay đổi và thoát khỏi trình chỉnh sửa, bạn cần phải làm như sau: tải lại cấu hình shell Để biến môi trường mới có hiệu lực trong phiên hiện tại. Việc này thường được thực hiện bằng lệnh:
nguồn ~ / .bashrc
Nếu bạn muốn kiểm tra xem mọi thứ đã được áp dụng đúng cách hay chưa, chỉ cần sử dụng lệnh này. echo Về biến này. Điều này sẽ cho bạn thấy các đường dẫn mà LD_LIBRARY_PATH hiện đang chứa:
tiếng vang $LD_LIBRARY_PATH
Nếu dòng đầu ra bao gồm thư mục bạn đã thêm, điều đó có nghĩa là cấu hình đã được tải đúng cách và trình tải động sẽ xem xét đường dẫn đó khi khởi chạy chương trình.
Cách thêm các tuyến đường bổ sung mà không gây ra lỗi gì
Điều đó thường không gây hứng thú. Thay thế hoàn toàn nội dung của LD_LIBRARY_PATHThay vào đó, hãy thêm một tuyến đường khác trong khi vẫn duy trì các tuyến đường hiện có. Điều này rất quan trọng nếu các thư viện khác đã được cấu hình và bạn không muốn làm gián đoạn sự phụ thuộc vào các ứng dụng khác.
Để "nối tiếp" các tuyến đường, một hình thức xuất khẩu thường được sử dụng. Thêm một thư mục mới trước biến trước đó.Ví dụ, nếu bạn muốn thêm /home/osboxes/sample Với những gì đã được định nghĩa, bạn có thể viết một cái gì đó như thế này vào phần của mình. .bashrc:
export LD_LIBRARY_PATH=/home/osboxes/sample:${LD_LIBRARY_PATH}
Thứ tự rất quan trọng vì trình tải động sẽ tìm kiếm. đầu tiên trong /home/osboxes/sample và sau đó là các địa chỉ còn lại mà biến đó đã có. Bằng cách này, bạn có thể chỉ giới thiệu thư viện ưu tiên cho một số bài kiểm tra nhất định, giữ nguyên phần cấu hình còn lại.
Sau khi chỉnh sửa tập tin, hãy nhớ lại lần nữa. thực thi lệnh "source" trên ~/.bashrc Áp dụng các thay đổi vào thiết bị đầu cuối hiện tại và kiểm tra lại với echo $LD_LIBRARY_PATH Tuyến đường mới xuất hiện ở đầu danh sách.
Nó được khuyến khích Tránh thay đổi liên tục trong LD_LIBRARY_PATHMỗi lần sửa đổi không đúng cách đều có thể ảnh hưởng đến những chương trình mà bạn thậm chí không ngờ tới. Hãy sử dụng mẫu "add" với cú pháp ${LD_LIBRARY_PATH} Nó giúp duy trì tính nhất quán, nhưng tốt nhất là không nên lạm dụng nó.
Cách thức tìm kiếm trong thư viện hoạt động và tại sao nó có thể nguy hiểm
Đằng sau biến môi trường LD_LIBRARY_PATH là một hành vi rất đặc thù của trình tải động: ưu tiên tìm kiếmCác đường dẫn bạn đưa vào biến này sẽ được xử lý trước các đường dẫn đã được biên dịch sẵn và các thư mục tiêu chuẩn trên hệ thống của bạn, chẳng hạn như: /lib, /usr/lib o /usr/lib64.
Vấn đề phát sinh khi các thư mục bổ sung đó chứa một thư viện có cùng tên Thư viện đó đến từ hệ thống, nhưng có phiên bản khác hoặc không tương thích trực tiếp. Trình tải động sẽ không ngần ngại chọn thư viện mà nó tìm thấy đầu tiên trong LD_LIBRARY_PATH, ngay cả khi ứng dụng ban đầu được liên kết với một phiên bản khác.
Tình huống này mở ra khả năng xảy ra nhiều loại xung đột, trong đó có một loại xung đột... vấn đề an ninh khá nghiêm trọngNếu người dùng độc hại tìm cách khiến bạn chạy một chương trình với biến môi trường LD_LIBRARY_PATH bị thao túng, có khả năng một thư viện độc hại sẽ xâm nhập và thay thế phiên bản hợp pháp, thực thi mã không mong muốn.
Vì lý do này, các tệp nhị phân Lệnh setuid hoặc setgid thường bỏ qua biến môi trường LD_LIBRARY_PATH. Hoàn toàn. Vì chúng chạy với quyền hạn cao, việc chấp nhận các đường dẫn tùy ý từ môi trường của người dùng sẽ là một rủi ro rất lớn; hệ thống đơn giản là loại bỏ biến đó trong những trường hợp này.
Ngoài khía cạnh an ninh, còn có một khía cạnh khác nữa. hiệu suất và hiệu quả Một điều cần lưu ý. Mỗi thư mục bạn thêm vào LD_LIBRARY_PATH sẽ buộc trình tải phải cố gắng mở các thư viện trong đường dẫn đó ngay cả khi chúng thực sự không có ở đó. Điều này dẫn đến nhiều lần gọi không thành công. open()Điều này dẫn đến lỗi "ENOENT (Không tìm thấy tệp hoặc thư mục)" và làm chậm quá trình khởi động ứng dụng.
Bạn càng thêm nhiều tuyến đường, đặc biệt nếu chúng là... thư mục từ xa (NFS)Việc sử dụng LD_LIBRARY_PATH càng nhiều, chương trình của bạn sẽ khởi động càng nhanh và tải trọng lên hệ thống tập tin càng lớn. Trong môi trường lớn với hàng trăm người dùng, việc sử dụng quá mức LD_LIBRARY_PATH có thể trở thành một điểm nghẽn không mong muốn.
Các vấn đề điển hình: sự không nhất quán và các phụ thuộc tiềm ẩn.
Một tác dụng phụ rất phổ biến khác là sự không nhất quán giữa các tệp nhị phân và thư việnBiến môi trường LD_LIBRARY_PATH có thể buộc một chương trình phải tải một phiên bản thư viện khác với phiên bản mà nó được liên kết, và chúng không phải lúc nào cũng tương thích 100% ở cấp độ ABI hoặc hành vi.
Trong trường hợp tốt nhất, nếu có sự không tương thích rõ ràng, ứng dụng sẽ... Nó sẽ không khởi động được hoặc sẽ bị lỗi. nhanh chóng, để lại những dấu vết rõ ràng của vấn đề. Nhưng điều thực sự nguy hiểm là khi thư viện "hoạt động tạm ổn", nhưng... Nó bắt đầu trả về kết quả không chính xác. hoặc hành xử theo một cách hơi khác, đủ tinh tế để khó gỡ lỗi.
Một cách sử dụng đặc biệt có vấn đề là của Định nghĩa biến môi trường LD_LIBRARY_PATH trên toàn cục. Trong hồ sơ người dùng hoặc, tệ hơn nữa, trong hồ sơ hệ thống. Khi điều này xảy ra, tất cả các ứng dụng đang chạy trong phiên đó đều bị ảnh hưởng bởi cấu hình đó, ngay cả những ứng dụng chưa bao giờ được thiết kế để hoạt động với các đường dẫn bổ sung đó.
Khi các tuyến đường toàn cầu đó thay đổi hoặc không còn tồn tại, nhiều hệ nhị phân có thể... ngừng làm việc từ ngày này sang ngày khác Bởi vì, mà không ai nhận ra, họ đã bắt đầu dựa vào "bản vá" LD_LIBRARY_PATH đó để tìm thư viện của mình.
Điều đó giải thích tại sao trong nhiều môi trường chuyên nghiệp, người ta lại nhấn mạnh việc chỉ sử dụng biến số như một phần của biến số đó. công cụ kiểm tra một lần hoặc giải pháp khẩn cấpkhông bao giờ được sử dụng như một cơ chế cấu hình ổn định lâu dài.
Làm thế nào để biết thư viện nào đang thực sự được sử dụng?
Để hiểu rõ những thay đổi của bạn ảnh hưởng đến LD_LIBRARY_PATH như thế nào, điều quan trọng là phải biết Mỗi tập tin thực thi sử dụng những thư viện nào?Đây là nơi các lệnh như lddĐiều này giúp ta có cái nhìn khá rõ ràng về liên kết động.
Lệnh Lệnh `ldd` cho biết, đối với một tập tin nhị phân nhất định, tập tin đó cần những thư viện động nào. và đường dẫn mà chúng được tải từ đó. Ví dụ, nếu bạn chạy:
ldd /usr/bin/file
Bạn sẽ thấy một danh sách các dòng thuộc loại này. libmagic.so.1 => /usr/lib64/libmagic.so.1, cùng với độ phân giải của linux-vdso.so.1, libc.so.6 và chính bộ sạc động. Thông tin này cung cấp cho bạn ảnh tĩnh trong số các phần phụ thuộc chính của tệp thực thi.
Tuy nhiên, có những trường hợp thư viện dùng chung tải các thư viện khác trong quá trình chạy (ví dụ, thông qua dlopen()), và những điều này không được phản ánh trong kết quả đầu ra của lệnh ldd. Để có cái nhìn đầy đủ hơn, cần phải kiểm tra xem những tệp .so nào thực sự được ánh xạ vào không gian địa chỉ của một tiến trình đang chạy.
Trong một số hệ thống kiểu Solaris, lệnh này tồn tại. xin vui lòngLệnh `ldd` liệt kê các thư viện động được một tiến trình tải dựa trên PID của nó. Khi được sử dụng trên một chương trình như Bash, bạn có thể thấy các thư viện khác, chẳng hạn như các mô-đun chuyển đổi ký tự, được thêm vào danh sách của `ldd` như thế nào. Mô-đun NSS Để giải quyết vấn đề cho người dùng và nhóm.
Trong hệ điều hành Linux thuần túy, pldd không phải lúc nào cũng có sẵn dưới dạng tệp nhị phân tiêu chuẩn, nhưng Có các đoạn mã được viết bằng Perl hoặc các công cụ khác. trích xuất thông tin từ /proc/<PID>/mapsĐạt được hiệu quả tương tự. Bằng cách này, bạn có thể kiểm tra xem cài đặt LD_LIBRARY_PATH của mình có gây ra việc tải các thư viện không mong muốn hay không.
Các phương pháp tối ưu hơn để tránh phụ thuộc vào LD_LIBRARY_PATH
Lời khuyên chung khi bạn bắt đầu tích lũy các giải pháp tạm thời với LD_LIBRARY_PATH rất đơn giản: Chỉ sử dụng ở mức tối thiểu khi thực sự cần thiết.Mỗi tuyến đường bạn thêm vào đều tiềm ẩn nguy cơ gây ra lỗi, xung đột phiên bản và các vấn đề về hiệu năng, vì vậy bạn nên cân nhắc các giải pháp thay thế mạnh mẽ hơn.
Nếu bạn biên dịch ứng dụng của mình (ví dụ, bằng cách làm theo hướng dẫn sau) Linux từ đầuBạn có thể sử dụng các tiện nghi sau: tùy chọn -rpath của trình liên kếtTùy chọn này cho phép bạn nhúng trực tiếp đường dẫn đến các thư viện mà nó phụ thuộc vào vào tệp thực thi, để tệp nhị phân biết nơi tìm thấy chúng mà không cần phải thay đổi các biến môi trường toàn cục.
Một ví dụ điển hình sẽ là như sau:
cc -o myprog obj1.o … objn.o -Wl,-rpath=/path/to/lib -L/path/to/lib -lmylib
Với điều này, trình liên kết sẽ thêm vào /path/to/lib đến đường dẫn thực thi của tệp thực thiNếu bạn cần nhiều tuyến đường khác nhau, việc sử dụng biến môi trường khá tiện lợi. LD_RUN_PATHmà trình liên kết cũng hiểu và bạn có thể điền vào đó một danh sách các thư mục được phân tách bằng dấu hai chấm.
Ví dụ, bạn có thể làm như sau:
export LD_RUN_PATH=/path/to/lib1:/path/to/lib2:/path/to/lib3
cc -o myprog obj1.o … objn.o -L/path/to/lib1 -lmylib1 -L/path/to/lib2 -lmylib2
Sau khi biên dịch xong, bạn có thể kiểm tra bằng ldd rằng nhị phân Nó giải quyết chính xác tất cả các thư viện của nó. mà không cần dựa vào LD_LIBRARY_PATH. Nếu xuất hiện bất kỳ lỗi "không tìm thấy" nào, bạn cần kiểm tra Makefile và cấu hình LD_RUN_PATH.
Khi không thể biên dịch lại, bạn có thể lựa chọn như sau: sử dụng các công cụ như chrpath Để sửa đổi đường dẫn thực thi đã được nhúng sẵn trong chính tệp thực thi. Kỹ thuật này có những hạn chế: bạn chỉ có thể ghi đè lên chuỗi hiện có, chứ không thể mở rộng nó, và nếu tệp nhị phân không có đường dẫn thực thi được xác định, thì không có gì để thay đổi.
Sử dụng các tập lệnh bao bọc và thực hiện các điều chỉnh cụ thể từ dòng lệnh.
Nếu cả việc liên kết bằng -rpath lẫn chrpath đều không khả thi, bạn vẫn có thể sử dụng phương pháp sau: trình bao bọc tập lệnh Họ chỉ nên điều chỉnh LD_LIBRARY_PATH cho một ứng dụng cụ thể và không hơn. Đó là một cách tiếp cận ít xâm phạm hơn nhiều so với việc can thiệp vào hồ sơ người dùng.
Một lớp bao bọc điển hình trong shell sẽ trông giống như thế này:
# / Bin / sh
LD_LIBRARY_PATH=/đường dẫn/đến/lib1:/đường dẫn/đến/lib2:/đường dẫn/đến/lib3
xuất LD_LIBRARY_PATH
exec /path/to/bin/myprog «$@»
Với cách tiếp cận này, biến số môi trường Nó chỉ bị "nhiễm bẩn" đối với myprog. Và, điều này cũng áp dụng cho bất kỳ tiến trình con nào mà nó khởi chạy, nhưng không áp dụng cho các lệnh khác mà bạn thực thi trong phiên làm việc của mình. Đây là một giải pháp khá chấp nhận được khi bạn buộc phải làm việc với các phiên bản thư viện cụ thể cho một ứng dụng nhất định.
Một lựa chọn rất hữu ích khác để kiểm tra nhanh là sử dụng lệnh env Để định nghĩa LD_LIBRARY_PATH chỉ cho một lần thực thi duy nhất. Ví dụ:
env LD_LIBRARY_PATH=/path/to/lib1:/path/to/lib2 ./myprog
Theo cách này, biến số được áp dụng. chỉ đối với lời kêu gọi đó de myprogVà khi quá trình hoàn tất, trình biên dịch của bạn vẫn còn nguyên vẹn, không có dấu vết của các đường dẫn lạ có thể ảnh hưởng đến lệnh tiếp theo bạn chạy.
Điều tuyệt đối nên tránh là làm những việc như sau:
export LD_LIBRARY_PATH=/path/to/lib1:/path/to/lib2
./myprog
Mẫu đó để lại LD_LIBRARY_PATH được định nghĩa cho tất cả các đơn hàng tiếp theo mà bạn khởi chạy từ thiết bị đầu cuối đó, điều này có thể gây ra các tác dụng phụ rất khó theo dõi sau này. Đối với các thử nghiệm riêng biệt, lệnh gọi với env Nó sạch sẽ hơn nhiều.
Thực hành tốt và những sai lầm phổ biến cần tránh
Một lời khuyên vàng được chấp nhận rộng rãi là Không bao giờ định nghĩa biến môi trường LD_LIBRARY_PATH trong hồ sơ đăng nhập.Không phải tệp người dùng cũng không phải tệp hệ thống. Nói cách khác, tránh thêm nó vào các tệp như... ~/.bash_profile, ~/.profile, /etc/profile hoặc tương tự.
Khi một biến nhạy cảm như vậy được thiết lập ở phạm vi toàn cục, tất cả các ứng dụng do người dùng đó khởi chạy sẽ sử dụng các đường dẫn bổ sung đó, ngay cả những ứng dụng được cấu hình hoàn hảo để hoạt động với các thư viện hệ thống. Thu hẹp phạm vi của nó thành... các kịch bản cụ thể hoặc các lần thực thi riêng lẻ Đó luôn là lựa chọn an toàn hơn nhiều.
Cũng khôn ngoan khi cảnh giác với trình cài đặt bên thứ ba Trong quá trình cài đặt, họ có thể yêu cầu bạn thêm LD_LIBRARY_PATH vào hồ sơ của mình, hoặc họ có thể tự động thêm vào cho bạn. Trong hầu hết các trường hợp, đây là một cách làm tắt dễ dàng cho nhà cung cấp, nhưng nó sẽ gây ra vấn đề cho môi trường của bạn trong trung hạn.
Bất cứ khi nào có thể, hãy cố gắng nỗ lực hơn một chút và tìm kiếm các giải pháp thay thế sạchĐiều chỉnh đường dẫn chạy tệp thực thi, cài đặt thư viện vào thư mục chuẩn, sử dụng các cơ chế đóng gói hiện đại hoặc đóng gói ứng dụng bằng trình bao bọc tập lệnh thay vì can thiệp vào môi trường chung.
Nếu bạn buộc phải sử dụng biến này, hãy cố gắng giữ nguyên các tuyến đường. hạn chế và cụ thể nhất Nếu có thể, hãy giảm thiểu số lượng thư mục và tránh bằng mọi giá các đường dẫn nằm trên hệ thống tệp từ xa trừ khi thực sự cần thiết.
Tóm lại, LD_LIBRARY_PATH vẫn giữ nguyên là... công cụ mạnh mẽ nhưng tinh tếCông cụ này rất hữu ích để kiểm tra các phiên bản thư viện mới, di chuyển các tệp .so cũ hoặc xây dựng môi trường độc lập cho các ứng dụng lớn, nhưng việc sử dụng bừa bãi tiềm ẩn rủi ro bảo mật, vấn đề hiệu năng và sự không nhất quán khó gỡ lỗi. Hiểu cách hoạt động của trình tải động, dựa vào các giải pháp thay thế như -rpath, LD_RUN_PATH hoặc các tập lệnh bao bọc, và giới hạn biến này trong các ngữ cảnh rất cụ thể là cách tốt nhất để tận dụng LD_LIBRARY_PATH mà không biến nó thành cái bẫy cho hệ thống của bạn.
Mục lục
- LD_LIBRARY_PATH là gì và nó thực sự được sử dụng để làm gì?
- Các trường hợp sử dụng điển hình cho LD_LIBRARY_PATH
- Hướng dẫn cấu hình LD_LIBRARY_PATH trong Linux từng bước một
- Cách thêm các tuyến đường bổ sung mà không gây ra lỗi gì
- Cách thức tìm kiếm trong thư viện hoạt động và tại sao nó có thể nguy hiểm
- Các vấn đề điển hình: sự không nhất quán và các phụ thuộc tiềm ẩn.
- Làm thế nào để biết thư viện nào đang thực sự được sử dụng?
- Các phương pháp tối ưu hơn để tránh phụ thuộc vào LD_LIBRARY_PATH
- Sử dụng các tập lệnh bao bọc và thực hiện các điều chỉnh cụ thể từ dòng lệnh.
- Thực hành tốt và những sai lầm phổ biến cần tránh