2013-04-26 47 views
31

Tôi đang làm việc với ứng dụng java cần tệp .dll trong java.library.path trong cửa sổ. Để chạy cùng một ứng dụng trong Linux Tôi có .so tập tin tương ứng mà nên được thêm vào java.library.path trong máy linux, tôi không tìm thấy bất kỳ giải pháp dễ dàng cho việc này cho đến nayCách thêm tệp .so vào java.library.path trong Linux

tôi đã đặt .so trong một thư mục mà đã có trong lớp con đường, nhưng ứng dụng của tôi vẫn phàn nàn có được không cần .so tập tin trong java.library.path

tôi muốn tìm:

  1. cách để thêm .so-java.library.path
  2. Làm thế nào để biết nếu nó đã gia tăng (khi thêm)

Trả lời

48

Thêm thư mục chứa để LD_LIBRARY_PATH trước khi tung ra ứng dụng

 export LD_LIBRARY_PATH = $LD_LIBRARY_PATH:/some/pathOfContainingDirectory 

Sử dụng java -XshowSettings:properties để hiển thị các java.library.path (và những người khác) giá trị .

+0

Cảm ơn Jose, điều này đã giúp tôi. Tôi thậm chí còn tìm thấy những thứ quan trọng khác với 'java.library.path' Đường dẫn này bị mất sau khi khởi động lại hệ thống, vì vậy tôi thêm nó qua tập tin/etc/profile để nó tự động thêm khi hệ thống khởi động lại, thậm chí' CLASSPATH' có các tệp .jar có liên quan bằng cách sử dụng các tệp 'java.library.path' .so này được ghi đè bởi CLASSPATH của ứng dụng của tôi/catalina.sh, do đó ứng dụng của tôi đã phàn nàn về các tệp .jars và related .so's. Sự cố được khắc phục khi 'ClASSPATH' có tệp .jar bắt buộc và cũng là tệp được yêu cầu .so trong' java.library.path'. – Lihkinisak

+0

Đối với người chạy nhầm lẫn của 'java -XshowSettings: properties'. Phiên bản java của tôi in ra các thuộc tính, và sau đó in ra '--help'. Vì vậy, tôi cần phải cuộn lên để xem các thiết lập. – Tarrasch

3

tôi đã sử dụng -XshowSettings java: phương pháp tài sản và tìm thấy con đường của một thư mục thiết lập trước đây và sao chép để tôi nộp đến thư mục đó

+0

Xin chào @Ravindu Tôi đã thử cách tiếp cận của bạn. Nó không làm việc cho tôi. Tôi đã thay đổi quyền thành 777 chỉ để chắc chắn. Nhưng không có gì xảy ra bất cứ đề nghị nào? –

0
File file = null; 
private String[] libs_path = System.getProperty("java.library.path").split(":"); 
public boolean isInstalled() { 
    boolean isInstalled = false; 
    for(String lib : libs_path) { 
      file = new File(lib+"/"+"yourlib.so"); 
      if(file.exists()) { 
       isInstalled = true; 
       break; 
      } 
     } 
    return isInstalled; 
} 


public void install() { 
    if(!isInstalled) { 
     for(String lib: lib_path) { 
      // copy your .so to lib 
      break; 
     } 
    } 
} 
4

Tôi đã có rất nhiều khó khăn để tìm ra này, hãy chắc chắn rằng bạn có tiền tố lib trong tên thư viện.

Vì vậy, bước,

  1. export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/some/pathOfContainingDirectory"

  2. Đổi tên thư viện để có lib như một tiền tố. [Thêm này như một phần của xây dựng kịch bản]

    mv JNIDemo.so libJNIDemo.so 
    

Kiểm tra câu trả lời này cho giải thích chi tiết https://stackoverflow.com/a/3987567/2076566

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