gpt4 book ai didi

java - 运行我生成的 .jar 会产生 "Can' t 在 AMD 64 位平台上加载此 .dll(机器代码=0xbd)”

转载 作者:行者123 更新时间:2023-11-29 04:43:30 24 4
gpt4 key购买 nike

我有一个项目正在使用一些 native 库 (.dll)。我正在使用 Netbeans,并且在运行配置中指定了 java.library.path。从 Netbeans 运行项目不会产生任何错误。

我正在使用 Maven,在构建项目时,我的 jar 被构建在 target 文件夹中。我正在使用 Maven 资源和依赖插件将所有 .dll 和我的程序的依赖项复制到 target/lib

当我尝试在 Netbeans“外部”运行我的应用程序时,出现以下错误:

Can't load this .dll (machine code=0xbd) on a AMD 64-bit platform

这是我用来运行 .jar 的命令:

java -Djava.library.path=lib\ -jar abcontrol-1.0-SNAPSHOT.jar

这是 Netbeans 用来从 IDE 运行项目的命令(我认为):

cd C:\Users\Birger\Workspace\myproject; "JAVA_HOME=C:\\Program Files\\Java\\jdk1.8.0_77" cmd /c "\"\"C:\\Program Files\\NetBeans 8.1\\java\\maven\\bin\\mvn.bat\" -Dexec.args=\"-Djava.library.path=lib\\ -classpath %classpath com.mysite.myproject.Main\" -Dexec.executable=\"C:\\Program Files\\Java\\jdk1.8.0_77\\bin\\java.exe\" -Dmaven.ext.class.path=\"C:\\Program Files\\NetBeans 8.1\\java\\maven-nblib\\netbeans-eventspy.jar\" -Dfile.encoding=UTF-8 org.codehaus.mojo:exec-maven-plugin:1.2.1:exec\""

我在想也许 java 命令使用了与 Netbeans 不同的 java 版本,所以我尝试了:

"C:\Program Files\Java\jdk1.8.0_77\bin\java.exe" -Djava.library.path=lib\ -jar abcontrol-1.0-SNAPSHOT.jar

但是,我仍然遇到同样的错误。

如何在没有 Netbeans 的情况下运行我的应用程序?

编辑

来自对这个问题的回答:How can I tell if I'm running in 64-bit JVM or 32-bit JVM (from within a program)? , 我加了

System.out.println(System.getProperty("sun.arch.data.model"));

我的代码尝试打印 JVM 架构。我从 Netbeans 和“外部”Netbeans 运行应用程序,在这两种情况下它都打印了 64

EDIT2

运行 java -version 打印

java version "1.8.0_77"
Java(TM) SE Runtime Environment (build 1.8.0_77-b03)
Java HotSpot(TM) 64-Bit Server VM (build 25.77-b03, mixed mode)

EDIT3

我尝试使用相同的依赖项和库创建另一个项目。这次我没有使用 maven,在这个项目中,当我尝试运行该项目时,我遇到了同样的错误:

无法在 AMD 64 位平台上加载此 .dll(机器代码=0xbd)

很明显,maven 正在施展魔法让这个项目运行起来。

EDIT4(变得绝望)

尝试运行这两个命令

"C:\Program Files\Java\jdk1.8.0_91\jre\bin\java.exe" -d32 -Djava.library.path=lib\ -jar abcontrol-1.0-SNAPSHOT.jar
"C:\Program Files\Java\jdk1.8.0_91\bin\java.exe" -d32 -Djava.library.path=lib\ -jar abcontrol-1.0-SNAPSHOT.jar

两种产量

Error: This Java instance does not support a 32-bit JVM. Please install the desired version.

最佳答案

当我尝试运行由 Maven 构建的 JAR(但使用 32 位 DLL - Can't load this .dll (machine code=0xbd) on a IA 32-bit platform)时,我遇到了同样的问题。奇怪的是:它发生在我将 DLL 移动到包含其他资源的文件夹中后,这些资源必须在构建期间复制。

我花了很长时间才发现 maven 资源插件出于某种原因正在更改 DLL 文件(可能是错误?)。原始 DLL 文件为 76 kb - 目标文件夹中复制的 DLL 为 118 kb。构建期间文件发生了一些问题。

添加一个额外的执行来复制没有 <filtering>true</filtering> 的 DLL 文件解决了问题。

关于java - 运行我生成的 .jar 会产生 "Can' t 在 AMD 64 位平台上加载此 .dll(机器代码=0xbd)”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38244970/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com