2013-01-11 34 views
8

Tôi có NetBeans dự án từ tutorial gây ngoại lệ:Cố gắng sử dụng DLL từ Java (JNA). Không thể tải ngoại lệ thư viện

Exception in thread "main" java.lang.UnsatisfiedLinkError: Unable to load library 'simpleDLL': Các module quy định không thể tìm được.

Cố gắng đưa simpleDLL.dll trong thư viện dự án, tập tin sao chép vào thư mục system32 không thành công.

+2

Vui lòng kiểm tra nếu simpleDLL là 32 hoặc 64 bit. Sau đó kiểm tra, nếu JVM cũng là 32 hoặc 64 bit. Họ phải cho cùng một nền tảng. –

+0

Cố gắng với một dll và JNI. có vẻ nó hoạt động – Karloss

Trả lời

11

Tôi có chính xác cùng một vấn đề với tải một DLL, tôi giải quyết nó theo cách này:

  • Như Christian Kuetbach cho biết, hãy kiểm tra xem simpleDLL bạn đang sử dụng có tương thích với kiến ​​trúc bộ vi xử lý của bạn hay không, một DLL 32 bit sẽ không hoạt động trên máy 64 bit và cũng là một DLL 64 bit sẽ không hoạt động trên 32 bit máy móc.
  • Nếu DLL tương thích, thì sự cố có thể nằm trong đường dẫn thư viện java của bạn. Tôi đặt DLL của tôi vào thư mục user.dir và sau đó tôi đã sử dụng mã này:

    Set Java đường dẫn thư viện để user.dir hoặc có thể con đường khác mà bạn muốn:

    String myLibraryPath = System.getProperty("user.dir");//or another absolute or relative path 
    
    System.setProperty("java.library.path", myLibraryPath); 
    

    tải thư viện:

    System.loadLibrary ("libraryWithoutDLLExtension");

Nó làm việc cho tôi, hãy thử và cho tôi biết nếu nó phù hợp với bạn.

+0

Tôi đã sử dụng mã này sau khi 'public static void main (String [] args) {'. Thư viện của tôi nằm trong user.dir. Cùng một kết quả - ngoại lệ – Karloss

+0

'Exception in thread "main" java.lang.UnsatisfiedLinkError: C: \ Windows \ System32 \ simpleDLL.dll: Không thể tìm thấy phụ thuộc libraries' – Karloss

+0

Nó không phải là trong user.dir của bạn, user.dir là đường dẫn nơi chương trình java được đặt, trừ khi bạn đã đặt nó trong C: \ Windows \ System32 \ bạn không có dll của bạn trong user.dir – BackSlash

5

Vui lòng kiểm tra nếu simpleDLL là 32 hoặc 64 bit. Sau đó kiểm tra, nếu JVM cũng là 32 hoặc 64 bit. Họ phải được cho cùng một nền tảng.

Bạn cũng có thể chỉ định một đường dẫn tuyệt đối, nếu bạn thay đổi loadLibrary() để load(): http://www.chilkatsoft.com/p/p_499.asp

+0

Cảm ơn bạn đã trở lại sponse! Kiểm tra simpleDLL với lệnh Cygwin "tệp", dll này là 32-bit, tôi cũng có máy 32 bit. – Karloss

+0

Đã thử với đường dẫn tuyệt đối với cùng một kết quả – Karloss

2

Tôi chỉ có thể chạy ở 32 bit (Xp).

Đặt DLL trong thư mục "c: \ Windows \ System32"

helloWorldDLL lib = (helloWorldDLL) Native.loadLibrary("helloworldDLL", helloWorldDLL.class);

Nếu java.lang.UnsatisfiedLinkError lỗi: Không thể tải thư viện" vẫn tồn tại, sử dụng Dependency Walker để xem các file DLL phụ thuộc.

Dependency Walker

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