tcnative-1.dll无法在IA 32位平台上加载AMD 64位.dll文件

35

当我尝试运行Tomcat时,出现了以下错误:

"java.lang.UnsatisfiedLinkError: C:\Program Files (x86)\apache-tomcat-7.0.34\bin\tcnative-1.dll: Can't load AMD 64-bit .dll on a IA 32-bit platform".

然而,我已经下载了64位的JRE,并且仔细检查了我的Java版本:

C:\Program Files (x86)\apache-tomcat-7.0.34\bin>java -version
java version "1.7.0_10"
Java(TM) SE Runtime Environment (build 1.7.0_10-b18)
Java HotSpot(TM) 64-Bit Server VM (build 23.6-b04, mixed mode)

我以前在这里看到过这个问题,但一个没有解决,另一个是Eclipse问题,但我直接访问tomcat时却出现了这个错误。
我如何找出正在检测哪个"IA 32位平台",并指导Tomcat朝正确的方向前进?此外,这是否是我的servlet通过Eclipse获得404错误的原因?
状态报告类型
请求的资源不可用。
日志:
C:\Program Files (x86)\apache-tomcat-7.0.34\bin>configtest.bat
Using CATALINA_BASE:   "C:\Program Files (x86)\apache-tomcat-7.0.34"
Using CATALINA_HOME:   "C:\Program Files (x86)\apache-tomcat-7.0.34"
Using CATALINA_TMPDIR: "C:\Program Files (x86)\apache-tomcat-7.0.34\temp"
Using JRE_HOME:        "C:\Program Files (x86)\Java\jre7"
Using CLASSPATH:       "C:\Program Files (x86)\apache-tomcat- 
7.0.34\bin\bootstrap.jar;C:\Program Files (x86)\apache-tomcat- 
7.0.34\bin\tomcat-juli.jar" 
java.lang.UnsatisfiedLinkError: C:\Program Files (x86)\apache-tomcat- 
7.0.34\bin\
tcnative-1.dll: Can't load AMD 64-bit .dll on a IA 32-bit platform
    at java.lang.ClassLoader$NativeLibrary.load(Native Method)
    at java.lang.ClassLoader.loadLibrary1(Unknown Source)
    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 org.apache.tomcat.jni.Library.<init>(Library.java:42)
    at org.apache.tomcat.jni.Library.initialize(Library.java:174)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.apache.catalina.core.AprLifecycleListener.init(AprLifecycleListener.java:180)
    at org.apache.catalina.core.AprLifecycleListener.isAprAvailable(AprLifecycleListener.java:85)
    at org.apache.catalina.connector.Connector.setProtocol(Connector.java:595)
    at org.apache.catalina.connector.Connector.<init>(Connector.java:69)
    at org.apache.catalina.startup.ConnectorCreateRule.begin(ConnectorCreateRule.java:62)
    at org.apache.tomcat.util.digester.Digester.startElement(Digester.java:1276)
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.AbstractXMLDocumentParser.emptyElement(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Unknown Source)
    at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
    at org.apache.tomcat.util.digester.Digester.parse(Digester.java:1537)
    at org.apache.catalina.startup.Catalina.load(Catalina.java:610)
    at org.apache.catalina.startup.Catalina.load(Catalina.java:658)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:281)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:455)
Dec 26, 2012 7:15:47 PM org.apache.catalina.core.AprLifecycleListener init
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Program Files (x86)\Java\jre7\bin;C:\windows\Sun\Java\bin;C:\windows\system32;C:\windows;C:\Program Files\Common Files\Microsoft Shared\Microsoft Online Services;C:\Program Files (x86)\Common Files\Microsoft Shared\Microsoft Online Services;C:\Program Files\Common Files\Microsoft Shared\Windows Live;C:\Program Files (x86)\Common Files\Microsoft Shared\Windows Live;C:\Program Files (x86)\PHP\;C:\windows\system32;C:\windows;C:\windows\System32\Wbem;c:\Program Files (x86)\Microsoft SQLServer\100\Tools\Binn\;c:\Program Files\Microsoft SQL Server\100\Tools\Binn\;c:\Program Files\Microsoft SQL Server\100\DTS\Binn\;c:\Program Files (x86)\Microsoft ASP.NET\ASP.NET Web Pages\v1.0\;c:\Program Files (x86)\Microsoft SQL Server\10
0\Tools\Binn\VSShell\Common7\IDE\;c:\Program Files (x86)\Microsoft SQL Server\100\DTS\Binn\;C:\Program Files (x86)\Windows Live\Shared;C:\Program Files\TortoiseSVN\bin;C:\Program Files\Microsoft\Web Platform Installer\;C:\Program Files\SourceGear\Common\DiffMerge\;C:\Ruby193\bin;.
Dec 26, 2012 7:15:47 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["http-bio-8080"]
Dec 26, 2012 7:15:47 PM org.apache.coyote.AbstractProtocol init
INFO: Initializing ProtocolHandler ["ajp-bio-8009"]
Dec 26, 2012 7:15:47 PM org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 448 ms

你的JVM可能带有32位和64位二进制文件,而且显然你正在Tomcat周围运行32位JVM。你是如何启动Tomcat(脚本或服务)的?你能否使用分析器/ jconsole /等连接到JVM并检查系统属性?具体来说,java.vm.nameos.arch的值是什么? - Christopher Schultz
感谢您的回复!我最初在通过“Run As> Run on server”通过Eclipse启动Tomcat时看到了这个错误。我也在直接运行Tomcat上的configtest.bat时看到了它。在Java控制台中,我得到了虚拟机:Java HotSpot(TM)64位服务器VM版本23.6-b04和架构:amd64。 - cmdkennedy
9个回答

27

哦,我找到了问题所在。我在一个奇怪的地方有一个旧版本的JRE,并且被JRE_HOME访问。我移除了该目录,修复了环境变量,问题得以解决。


9

我刚刚找到了解决方案。问题在于我的JRE_HOME指向了一个32位的JRE,而我的机器是64位的。我安装了64位的JRE,并在系统变量中替换了它,服务器就干净地启动了。


更改环境变量需要注销以生效。 - TiyebM

4
请检查Eclipse指向的默认版本。属性->Java编译器。将其切换到您安装的JRE版本。这对我有用。谢谢。

2
最初的回答:在Windows服务器上进行死灵术(2019年3月)。对于问题“无法在IA 32位平台上加载AMD 64位.dll”,在Stack Overflow上有几个答案。所有答案都只展示了部分解决方案。以下是完整的解决方案。
原因:使用了32位版本的Java,而库需要64位版本。
(1)确保设置了JAVA_HOME和CATALINA_HOME。例如:
set JAVA_HOME=C:\ Program Files \ Java \ jre1.8.0_201 set CATALINA_HOME=C:\ Program Files(x86)\ tomcat-9.0.16
这些是2019年3月的默认位置。实际版本并不重要,重要的是以下命令应该能够正常运行:
"%java_home%\bin\java.exe" -version
"%catalina_home%\bin\configtest.bat"

最初的回答应该会给你几行代码。其中一行应该会说类似于:
Java HotSpot(TM) 64-bit Server VM

当然,只有在64位的Windows机器上才能运行64位。 (如何检查:windows - 运行 - 系统信息。它应该在系统类型中提到是否是32位或54位系统)
配置测试显示了TomCat使用的Java和Catalina Home值。
如果您安装了错误的Java版本:
  • 卸载旧的Java版本:控制面板 -(主页)程序 - 卸载程序
  • 转到下载Java手动下载页面。(如果链接不再起作用,请使用Google)。不要进行自动下载,这可能会得到与您想要的不同版本,具体取决于您的浏览器。
  • 下载windows离线64位,不要在线下载,因为它会根据您的浏览器来决定您是否需要32位或64位。
  • 运行安装程序。
  • 安装Java后,请检查您的路径和环境变量,并相应地进行调整(在Windows Server 2012中:控制面板 - 系统和安全 - 系统 - 更改设置 - 高级 - 环境变量) -重新打开命令提示符。 再次检查路径和环境变量并运行上述测试。
注:原始答案翻译成“最初的回答”。

1
请检查IDE使用的项目SDK版本。
在Intellij IDEA中:文件 -> 项目结构 -> 项目
在Eclipse中:属性 -> Java编译器
将其切换到已安装的JDK x64版本。

1
我遇到的问题是,我在Linux机器上通过swig创建了共享本地库(libmyLic.so),将其复制到Windows上,并尝试运行我的Java测试。这个测试应该使用System.loadLibrary或System.load接口。但它不起作用,因为swig为UNIX环境创建了我的共享本地库(将C++代码包装成Java)。当我将所有测试复制到Linux上时,问题得到解决。

0

这个错误是由于 Java 的32位和64位冲突造成的。 分析: 在启动 Tomcat 时,查看初始日志。您将了解到正在使用哪个 Java 版本来运行 Tomcat。

Jun 21, 2021 2:44:12 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Server version name:   Apache Tomcat/8.5.66
Jun 21, 2021 2:44:12 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Server built:          May 8 2021 22:44:01 UTC
Jun 21, 2021 2:44:12 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Server version number: 8.5.66.0
Jun 21, 2021 2:44:12 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: OS Name:               Windows 10
Jun 21, 2021 2:44:12 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: OS Version:            10.0
Jun 21, 2021 2:44:12 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Architecture:          amd64
Jun 21, 2021 2:44:12 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Java Home:             C:\Program Files\Java\jdk1.8.0_291\jre
Jun 21, 2021 2:44:12 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: JVM Version:           1.8.0_291-b10
Jun 21, 2021 2:44:12 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: JVM Vendor:            Oracle Corporation

如果发现错误的架构或错误的Java路径,请尝试修复。如果由于某种原因您遇到困难,请尝试重命名不正确的JDK目录。它将开始在某个地方出错。在我的情况下,它抱怨我添加到Eclipse的Tomcat服务器的Java。我必须删除并重新添加Tomcat,以更正它将用于Tomcat的正确JDK。这解决了我的问题。

0
在尝试在64位Windows机器上运行Jenkins从属时,遇到相同的消息“无法在AMD 64位平台上加载IA 32位.dll”,通过删除指向32位jvmhook的JAVA_TOOL_OPTIONS和_JAVA_OPTIONS环境变量来解决它。

0
如果上述答案无效,请检查您的路径变量是否指向正确的(64位或32位)Apache Tomcat安装文件夹的bin文件夹。这对我有用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接