2012-02-21 4 views
6

Я пишу приложение Java, который должен взаимодействовать с должен общаться с XBee радио над usb-cable.To сделать это, я использую XBee-Java API (http://code.google.com/p/xbee-api/)Как запустить API, созданный для 32-разрядной версии на 64-битной машине?

На мой старый 32- бит все это работало нормально. Но когда я импортировал проект на 64-битную машину, он сразу же выдает исключение, в котором говорится: «Невозможно загрузить IA 32-bit .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) 

Спасибо, Том

ответ

7

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

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

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

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

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

1

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

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

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

Используйте Java 32Bit VM для выполнения кода.

1

Проверить https://github.com/NeuronRobotics/nrjavaserial

Он включает несколько собственных библиотек внутри кувшина (Windows, Linux, Mac, 32 и 64) и загружать их автоматически поэтому вы забываете о том, чтобы сообщить JVM, где их найти