2012-11-19 42 views
5

Tôi đang cố gắng sử dụng dll của bên thứ ba cho chương trình tôi đang viết bằng java. Thật không may, nó chỉ có hỗ trợ 32-bit. Khi tôi cố gắng để tải dll trong một 64-bit VM, tôi nhận được lỗi sau:Chạy dll 32 bit trên máy 64 bit trong java

Can't load IA 32-bit .dll on a AMD 64-bit platform 

Tôi đã cố gắng chạy trong một 32-bit VM, mà làm việc trong nhật thực, nhưng khi tôi xuất dự án, Tôi nhận được lỗi tương tự. Hãy giúp tôi!

Trân trọng, Ben

+0

Bạn có chắc chắn rằng bạn đang sử dụng đúng java bên ngoài Eclipse? Hãy thử một java -version để kiểm tra nếu một trong những quyền (32bit) được sử dụng. – Burkhard

Trả lời

9

Bạn không thể sử dụng DLL 32-bit trong một 64-bit Hotspot JVM. Nó sẽ không hoạt động. Và tôi không biết bất kỳ JVM 64 bit nào khác hỗ trợ các DLL 32 bit.

sự lựa chọn của bạn là:

  • Đổi thành một JVM 32-bit. (Bạn có thể chạy JVM 32 bit trên hệ điều hành 64 bit ...)
  • Chuyển DLL sang 64 bit.
  • Chuyển sang thư viện thay thế thuần Java hoặc có DLL 64 bit.

I have tried running in a 32-bit VM, which works in eclipse, but when I export the project, I get the same error.

Đó chỉ có thể có nghĩa là bạn đang chạy một JVM 32-bit để chạy Eclipse, và 64-bit JVM để chạy các ứng dụng bên ngoài của Eclipse. (Vấn đề là cách bạn chạy ứng dụng, không phải cách bạn xuất ứng dụng ...)

+1

+1 Tôi không biết bất kỳ hệ điều hành nào cho phép các ứng dụng 64 bit tải các thư viện chia sẻ 32 bit. Nó không phải là một hạn chế của Java. –

+0

Tôi đã tìm thấy câu hỏi và câu trả lời này sau chuỗi tìm kiếm dài, về lý do mã của tôi không thành công. Điều này giải quyết nó. Cảm ơn rất nhiều. Tôi đã học được điều gì đó ngày hôm nay! – KjetilNordin

2

Cách duy nhất để sử dụng thư viện được chia sẻ 32 bit từ JVM 64 bit là chạy một JVM 32 bit bổ sung và truy cập thông qua RMI, JMS hoặc một số hình thức nhắn tin.

Giới hạn nội tại của các chương trình 64 bit (không chỉ Java) mà nó không thể trao đổi con trỏ với thư viện 32 bit.

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