Как запустить API, созданный для 32-битного на 64-битном компьютере? - PullRequest
6 голосов
/ 21 февраля 2012

Я пишу Java-приложение, которое должно взаимодействовать, должно взаимодействовать с радио XBee через usb-cable. Для этого я использую API-интерфейс xbee-java (http://code.google.com/p/xbee-api/)

Вкл.На моем старом 32-битном компьютере все работало нормально, но когда я импортировал проект на 64-битный компьютер, он сразу выбрасывает исключение, которое гласит: «Не удается загрузить 32-битный DLL-файл IA на 64-битной платформе AMD.". Я понятия не имею, как я могу решить эту проблему.

код ошибки:

    java.lang.UnsatisfiedLinkError: C:\Users\Tom\Documents\XbeeJava\rxtxSerial.dll: Can't load IA 32-bit .dll on a AMD 64-bit platform thrown while loading gnu.io.RXTXCommDriver
Closing connection with local XBee
Exception in thread "Thread-1" java.lang.UnsatisfiedLinkError: C:\Users\Tom\Documents\XbeeJava\rxtxSerial.dll: Can't load IA 32-bit .dll on a AMD 64-bit platform
    at java.lang.ClassLoader$NativeLibrary.load(Native Method)
    at java.lang.ClassLoader.loadLibrary0(Unknown Source)
    at java.lang.ClassLoader.loadLibrary(Unknown Source)
    at java.lang.Runtime.loadLibrary0(Unknown Source)
    at java.lang.System.loadLibrary(Unknown Source)
    at gnu.io.CommPortIdentifier.<clinit>(CommPortIdentifier.java:83)
    at com.rapplogic.xbee.RxTxSerialComm.openSerialPort(RxTxSerialComm.java:71)
    at com.rapplogic.xbee.RxTxSerialComm.openSerialPort(RxTxSerialComm.java:61)
    at com.rapplogic.xbee.api.XBee.open(XBee.java:140)
    at me.server.HardwareCommunications.SensorListener.run(SensorListener.java:47)
    at java.lang.Thread.run(Unknown Source)

Спасибо, Том

Ответы [ 5 ]

7 голосов
/ 21 февраля 2012

Невозможно загрузить 32-битную DLL в 64-битный процесс.

Исходя из описания, используемая JVM является 64-разрядной, а DLL rxtxSerial.dll - 32-разрядной. Чтобы решить, либо:

  • Получить 64-битный rxtxSerial.dll или
  • Установите и используйте 32-разрядную JVM с текущим значением rxtxSerial.dll
6 голосов
/ 21 февраля 2012

64-разрядный исполняемый файл (и процесс) (ваша виртуальная машина Java) может использовать только 64-разрядные библиотеки DLL.

Но вы можете скачать, установить и запустить 32-битную версию Java. Если вам также не нужен доступ к 64-битным DLL или если вам нужно больше 2–3 ГБ памяти, 32-битная Java VM будет нормально работать на 64-битной машине.

5 голосов
/ 21 февраля 2012

Вы можете получить 64-битные dll для rxtx здесь: http://www.cloudhopper.com/opensource/rxtx/

1 голос
/ 23 ноября 2015

Чек https://github.com/NeuronRobotics/nrjavaserial

Он включает в себя несколько собственных библиотек внутри jar (windows, linux, mac, 32 и 64) и загружает их автоматически, так что вы забыли сообщить JVM, где их найти

1 голос
/ 21 февраля 2012

Кажется, что ваша библиотека XBee использует JNI для вызова некоторого встроенного кода, встроенного в DLL.

вы не можете связать эту DLL в 64-битной виртуальной машине Java, и это нормально.

Итак, вы будете иметь: - перекомпилировать XBee, если у вас есть доступ к исходному коду. - получить 64-битный дистрибутив API

Используйте 32-битную виртуальную машину Java для выполнения вашего кода.

...