2009-03-02 29 views
9

Nơi tốt nhất để thiết lập ứng dụng cụ thể là biến số LD_LIBRARY_PATH trên Solaris là gì? như thế nàoNơi đặt LD_LIBRARY_PATH trên Solaris?

LD_LIBRARY_PATH

việc biến?

Chúng tôi hiện đang thiết lập nó trong .kshrc, nhưng các ứng dụng khác nhau cần các phiên bản khác nhau của khuôn khổ nhắn tin, nhưng các ứng dụng này chạy theo việc sử dụng giống nhau và vì thế họ sẽ cần phải khác nhau LD_LIBRARY_PATH, vì vậy theo ý kiến ​​của bạn là nơi tốt nhất để thiết lập này là gì biến?

Về cơ bản, tôi đang cố gắng tìm ra cách tạo phần đường dẫn biến này của ứng dụng thay vì môi trường người dùng cụ thể.

Trả lời

14

Thông thường tôi sẽ chỉ có một kịch bản lệnh shell khởi động ứng dụng. Trong kịch bản trình bao, tôi sẽ đặt LD_LIBRARY_PATH thành bất kỳ thứ gì tôi cần cho ứng dụng đó, sau đó có tập lệnh bắt đầu ứng dụng đó. Làm như vậy sẽ khiến đường dẫn chỉ được đặt cho ứng dụng đó.

+0

Cảm ơn, đó là những gì tôi nghĩ. Tuy nhiên nó sẽ có ý nghĩa để đặt biến trong tệp app_profile bên ngoài và sau đó nguồn tập tin đó trong kịch bản? Hay bạn có thấy vấn đề gì với điều đó không? Tôi đang suy nghĩ vì nhiều ứng dụng cần có cùng một đường dẫn nên có thể làm cho nó có ý nghĩa? –

+0

LD_LIBRARY_PATH (hoặc LD_LIBRARY_PATH_32 và LD_LIBRARY_PATH_64) cần phải được thiết lập trước khi thực thi được khởi chạy - vì ld.so.1 đọc nó trước khi bạn nhận được chính() và không đọc lại nó sau đó. –

+0

@Ville - Tôi nghĩ điều đó sẽ hiệu quả, nhưng bạn sẽ muốn thử nó trước để chắc chắn –

6

Bạn có thể tìm thấy mô tả chính thức của LD_LIBRARY_PATH trên trang hướng dẫn cho "ld.so.1", tức là chạy "man ld.so.1". Nó cũng mô tả một số biến khác được vinh danh bởi trình liên kết thời gian chạy.

Ngoài LD_LIBRARY_PATH, tệp thực thi và thư viện được chia sẻ cũng có thể có đường dẫn tìm kiếm tích hợp cho thư viện. Nếu bạn đang chạy một ứng dụng mà bạn đã liên kết chính mình, bạn có thể sử dụng tùy chọn -R của ld để thiết lập đường dẫn được xây dựng (cả Sun CC và gcc có các tùy chọn để thực hiện điều tương tự). Điều này có thể cho phép bạn tránh sử dụng LD_LIBRARY_PATH ngay từ đầu.

-1

Bạn có thể sử dụng lệnh crle:

crle -l/path/to// lib của bạn/file

+1

crle bị cùng một vấn đề như thiết lập nó trong một tập tin môi trường toàn cầu - nó ảnh hưởng đến tất cả các ứng dụng, do đó, không giúp đỡ khi các ứng dụng khác nhau cần các phiên bản khác nhau của thư viện. – alanc

+0

alanc là đúng. –

+1

@alanc là * sai *. 'crle -c' sẽ cho phép bạn ảnh hưởng đến các ứng dụng cụ thể (xem Ví dụ 6 tại http://docs.oracle.com/cd/E19082-01/819-2239/crle-1/index.html) – vladr

1

Câu trả lời crle là đúng nhất. Trên Solaris, LD_LIBRARY_PATH không nên được sử dụng. Sử dụng crle để thay thế. Để xem các đường dẫn hiện tại, chỉ cần chạy "crle" của chính nó. Để cập nhật danh sách, hãy sử dụng crle -u -l /path/to/your/lib/directory. Cần có -u để ghi các thay đổi đối với cấu hình hệ thống, nếu không thay đổi sẽ tạm thời. Xem trang người đàn ông để biết thêm tùy chọn.

+2

Như đã lưu ý trong các câu trả lời trước đó, nó không phải là giải pháp tốt nhất, vì nó ảnh hưởng đến tất cả các chương trình *, không chỉ các chương trình bị hỏng mà cần một đường dẫn khác với chúng. Trình bao bọc shell script để thiết lập LD_LIBRARY_PATH chỉ dành cho những ứng dụng an toàn hơn và an toàn hơn là thay đổi tất cả các chương trình, và là cách duy nhất để xử lý các ứng dụng khác nhau cần các đường dẫn không tương thích. – alanc

+2

@alanc, không chính xác; bạn có thể sử dụng 'crle -c' để xác định môi trường cho mỗi ứng dụng, một biểu hiện la Windows (xem Ví dụ 6 tại http://docs.oracle.com/cd/E19082-01/819-2239/crle-1/index. html). – vladr

0

Chỉ tìm thấy trường hợp LD_LIBRARY_PATH toàn cầu không có hiệu lực, tôi đã phải bao bọc tập lệnh và đặt LD_LIBRARY_PATH trước ứng dụng. crle là một giải pháp toàn cầu tốt nếu bạn cài đặt nhiều libs trong/opt/csw/lib, thông qua pkgutil từ blastwave.

0

Bạn có thể kiểm tra tệp .profile hoặc .profile.user của mình.Tại đây sẽ là mục nhập nhận xét cho nó. Bạn không nên sử dụng nó vì nó bị hỏng.Bạn nên xây dựng tệp nhị phân bằng cách chuyển giá trị cho cờ thay vì sử dụng biến.

2

Vladr, alanc là chính xác.

Không nên đặt LD_LIBRARY_PATH trên Solaris. Ở tất cả.

Nếu bạn cần nướng đường chạy cụ thể vào thư viện hoặc tệp thực thi, thì bạn nên sử dụng cờ -R cho trình liên kết. Nếu xây dựng bằng gcc, sau đó sử dụng -Wl, Rpath (Tôi nghĩ).

Nếu bạn cần làm điều này cho một bước sau khi xây dựng (ví dụ, bởi vì bạn đang thiếu nguồn để biên dịch lại), sau đó elfedit (1) sẽ giúp bạn rất nhiều. Tài liệu được biên tập trong trang hướng dẫn và cũng có trong Hướng dẫn về Thư viện của Linker + tại http://docs.oracle.com/cd/E26502_01/html/E26507/index.html

+0

Vì lý do tương thích, GCC trên Solaris cũng hiểu '-R'. Bạn vẫn có thể sử dụng '-Wl, -Rsomedir' vì nó sau đó được chuyển sang Linux. Hoặc sử dụng '-Wl, -rpath, somedir' cũng được hiểu, ví dụ: bởi trình liên kết thời gian chạy trên Solaris và Linux. – maxschlepzig

Các vấn đề liên quan