如何在 64 位机器上运行 32 位 API?

发布于 2025-01-07 15:49:17 字数 1431 浏览 2 评论 0 原文

我正在编写一个 java 应用程序,它必须通过 USB 电缆与 XBee 无线电进行通信。为此,我使用 xbee-java API (http://code.google.com/p/xbee-api/

在我的旧 32 位机器上一切正常。 但是当我将项目导入到 64 位计算机时,它立即抛出异常:“无法在 AMD 64 位平台上加载 IA 32 位 .dll”。 我不知道如何解决这个问题。

错误代码:

    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)

谢谢,汤姆

I'm writing a java application which has to communicate with has to communicate with an XBee radio over a usb-cable.To do this , I use the xbee-java API (http://code.google.com/p/xbee-api/)

On my old 32-bit machine it all worked fine .
But when I imported the project to a 64-bit machine , it throws immediately an exception which says :" Can't load IA 32-bit .dll on a AMD 64-bit platform" .
I don't have any idea how I can solve this problem .

the error code :

    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)

Thanks , Tom

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

缱倦旧时光 2025-01-14 15:49:17

无法将 32 位 DLL 加载到 64 位进程中。

根据描述,您运行的 JVM 是 64 位,但 DLL rxtxSerial.dll 是 32 位。要解决此问题,请执行以下任一操作:

  • 获取 64 位 rxtxSerial.dll,或者
  • 安装 32 位 JVM 并将其与当前的 rxtxSerial.dll 一起使用

It is not possible to load a 32-bit DLL into a 64-bit process.

Based on the description, the JVM you are running is 64-bit but the DLL rxtxSerial.dll is 32-bit. To resolve, either:

  • Obtain 64-bit rxtxSerial.dll, or
  • Install and use 32-bit JVM with the current rxtxSerial.dll
记忆之渊 2025-01-14 15:49:17

64 位可执行文件(和进程)(您的 Java VM)只能使用 64 位 DLL。

但您可以下载、安装并运行 32 位版本的 Java。除非您还需要访问 64 位 DLL 或需要超过 2 到 3 GB 的内存,否则 32 位 Java VM 将在 64 位计算机上正常运行。

A 64-bit executable (and process) (your Java VM) can only use 64 bit DLLs.

But you could download, install and run a 32-bit version of Java. Unless you also need to access 64 bit DLLs or need more than 2 to 3 GB of memory, the 32 bit Java VM will run fine on a 64 bit machine.

2025-01-14 15:49:17

您可以在此处获取 rxtx 的 64 位 dll:
http://www.cloudhopper.com/opensource/rxtx/

You can get the 64 bit dlls for rxtx here:
http://www.cloudhopper.com/opensource/rxtx/

看轻我的陪伴 2025-01-14 15:49:17

看来您的 XBee 库依赖于 JNI 来调用 DLL 中嵌入的一些本机代码。

您无法在 64 位 Java 虚拟机中链接此 DLL,这是正常的。

因此,您将拥有:
- 如果您有权访问源代码,请重新编译 XBee。
- 获取 API 的 64 位发行版

使用 Java 32 位 VM 执行您的代码。

It seems that your XBee Library relies on JNI to call some native code embedded in a DLL.

you cannot link this DLL within a 64Bit Java Virtual Machine, and that's normal.

So, you'll have either:
- to recompile XBee if you have access to the source code.
- to get a 64Bit distribution of the API

Use a Java 32Bit VM to execute your code.

萌酱 2025-01-14 15:49:17

检查 https://github.com/NeuronRobotics/nrjavaserial

它包含 jar 内的几个本机库(windows、 linux、mac、32 和 64)并自动加载它们,这样您就无需告诉 JVM 在哪里可以找到它们

Check https://github.com/NeuronRobotics/nrjavaserial

It includes several native libraries inside the jar (windows, linux, mac, 32 and 64) and load them automatically so you forget about telling JVM where to find them

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文