2010-12-13 34 views
6

Bình bên thứ ba mà tôi sử dụng đang cố tải một thư viện gốc bằng System.loadLibrary. Tôi nghĩ rằng những gì đang xảy ra là một trong những thư viện được tải có một sự phụ thuộc vào một thư viện bản địa khác. Chỉ -Djava.library.path không hoạt động đúng trong trường hợp này. Các hướng dẫn từ trang web của ứng dụng được đặt các dll trong thư mục jre/bin, nhưng tôi nghĩ rằng đây là một ý tưởng thực sự tồi (đặc biệt là khi cố gắng triển khai đến các trang web của khách hàng).Java System.loadLibrary phụ thuộc

Vì vậy, câu hỏi này thực sự là 2 phần.

  1. Có ý nghĩa gì nếu một lib bản địa cố gắng tải một lib gốc khác -Djava.library.path không hoạt động?

  2. Có giải pháp tốt để giải quyết vấn đề này không? Tôi đoán tôi có thể gọi một cách rõ ràng System.loadLibrary trên tất cả các dlls (tôi thậm chí không chắc chắn nếu điều này sẽ làm việc), nhưng tôi sẽ cần phải chắc chắn để gọi cho họ theo thứ tự đúng nếu không tôi sẽ có cùng một vấn đề.

EDIT: Tôi nghĩ rằng điều này làm cho cảm giác rằng nó đang xảy ra, và là giải pháp tốt nhất mà tôi đã đọc cho đến nay là sử dụng phụ thuộc walker để con nó ra và sau đó tải chúng theo thứ tự ngược lại ... nhưng tôi 'm mở để gợi ý tốt hơn ...

cảm ơn, Jeff

Trả lời

4

Vâng, nó làm cho cảm giác rằng thư viện bản địa không sử dụng các tài sản -Djava.library.path Java để liên kết đến các thư viện bản địa khác.

Một số phương pháp có thể:

  • Các jar của bên thứ ba là cố định để tải phụ thuộc riêng của mình, dựa vào java.library.path.
  • Mã của bạn tải các tệp DLL do jar của bên thứ ba yêu cầu theo loại địa hình đảo ngược. Tuy nhiên, điều này làm cho mã của bạn chỉ định các phụ thuộc của jar của bên thứ ba. Những phụ thuộc đó có thể thay đổi.
  • Bạn sử dụng đường dẫn tìm kiếm DLL cụ thể cho hệ điều hành (ví dụ: sử dụng LD_LIBRARY_PATH trên Unix/Linux/Mac hoặc PATH trên Windows). Tuy nhiên, điều này có thể yêu cầu một tập lệnh khởi động.
+1

Tôi đã thử tải theo cách ngược lại và nó hoạt động, vì vậy có thể tôi sẽ sử dụng cách tiếp cận đó, trừ khi có một số giải pháp ma thuật mà tôi đang thiếu. –

+0

Đó có lẽ là những gì tôi sẽ làm là tốt, ngoài việc có thể gửi một lỗi cho bên thứ ba. Nếu bạn đang làm phần mềm đa nền tảng, các thư viện được liên kết động có thể khác nhau giữa các nền tảng. Chúc may mắn! –

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