【问题标题】:tcnative-1.dll Can't load AMD 64-bit .dll on a IA 32-bit platformtcnative-1.dll 无法在 IA 32 位平台上加载 AMD 64 位 .dll
【发布时间】:2012-12-12 11:52:30
【问题描述】:

我在尝试运行 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 错误的原因吗?

输入状态报告

消息/JSPandServlet/控制器

说明请求的资源不可用。

日志:

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/etc 连接到 JVM。并检查系统属性?具体来说,java.vm.nameos.arch 的值是多少?
  • 感谢您的回复!我在通过 Eclipse 通过“运行方式 > 在服务器上运行”启动 Tomcat 时第一次看到错误。我在 Tomcat 上直接运行 configtest.bat 时也看到了它。在 Java 控制台中,我得到了虚拟机:Java HotSpot(TM) 64-Bit Server VM 版本 23.6-b04 和架构:amd64。

标签: java tomcat unsatisfiedlinkerror


【解决方案1】:

哦,伙计,我发现了问题。我在一个奇怪的地方有一个旧的 JRE,JRE_HOME 正在访问它。我删除了那个目录,修复了我的环境变量,然后处理了它。

【讨论】:

    【解决方案2】:

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

    【讨论】:

    • 更改环境变量需要注销才能生效。
    【解决方案3】:

    请检查 eclipse 指向的默认版本。Properties->Java Compiler。将其切换到您安装的 JRE 版本。这对我有用。谢谢。

    【讨论】:

      【解决方案4】:

      Windows 服务器上的死灵法(2019 年 3 月)。关于堆栈溢出有几个答案,针对Can't load AMD 64-bit .dll on a IA 32-bit platform“的问题。所有这些都只是解决方案的一部分。这里是所有内容。

      原因:使用了 32 位版本的 Java,而库需要 64 位版本。

      (1) 确保设置了 JAVA_HOME 和 CATALINA_HOME。类似的东西

      设置 JAVA_HOME=C:\Program Files\Java\jre1.8.0_201 设置 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 位只在 64 位 Windows 机器上。 (如何检查:windows - run - system information。应该在系统类型中提及是基于 32 还是 54 的系统)

      配置测试显示 TomCat 使用的 java 和 catalina home 值。

      如果您的 Java 版本不正确:

      • 卸载旧 Java 版本:控制面板 -(主页)程序 - 卸载程序
      • 转到download Java manual download page。 (如果链接不再有效,请使用 Google)不要进行自动下载,您可能会获得与您想要的不同的版本,具体取决于您的浏览器。
      • 下载 windows offline 64-bit 不要再联机了:它会查看您的浏览器来决定您想要 32 位还是 64 位。
      • 运行安装程序。
      • 安装 Java 后,检查您的路径和环境变量并进行相应调整(在 windows server 2012 中:控制面板 - 系统和安全 - 系统 - 更改设置 - 高级 - 环境变量) -重新打开命令提示符。再次检查路径和环境变量并运行上述测试。

      【讨论】:

        【解决方案5】:

        请检查 IDE 使用的项目 SDK 版本。

        在 Intellij IDEA 中:文件 -> 项目结构 -> 项目。 在 Eclipse 中:属性 -> Java 编译器

        切换到安装的JDK x64版本。

        【讨论】:

          【解决方案6】:

          对于同一条消息 “无法在 AMD 64 位平台上加载 IA 32 位 .dll” 在尝试在 64 位 Windows 机器上运行 Jenkins 从站时,通过删除指向 32 位 jvmhook 的 JAVA_TOOL_OPTIONS 和 _JAVA_OPTIONS 环境变量来修复它。

          【讨论】:

            【解决方案7】:

            我遇到的一些类似消息的问题是,我通过 swig 在 Linux 机器 (libmyLic.so) 上创建了共享本机库,将其复制到 Windows,并且试图运行我的 java 测试。该测试应该使用 System.loadLibrary 或 System.load 接口。它不起作用,因为 swig 为 UNIX 环境创建了我的共享本机库(将 C++ 代码包装到 java)。当我将所有测试复制到 Linux 时,它解决了问题。

            【讨论】:

              【解决方案8】:

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

              【讨论】:

                【解决方案9】:

                此错误仅因 java 的 32 位和 64 位冲突而触发。 分析: 在启动 tomcat 时查看初始日志。你会明白 will 是用于 tomcat 的 java。

                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。这已通过问题解决。

                【讨论】:

                  猜你喜欢
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多