I’m getting this error when I try to run tomcat:
"java.lang.UnsatisfiedLinkError: C:Program Files (x86)apache-tomcat-7.0.34bintcnative-1.dll: Can't load AMD 64-bit .dll on a IA 32-bit platform".
However, I have the 64 bit JRE downloaded, and double-checked my java version:
C:Program Files (x86)apache-tomcat-7.0.34bin>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)
I’ve seen this question here before, but in one there was no resolution, and in the other it was an Eclipse issue, but I’m getting this error when I access tomcat directly.
How do I find out which “IA 32 bit platform” is being detected, and how do I point Tomcat in the right direction? Also, could this be why my servlet is getting this 404 error through Eclipse?
type Status report
message /JSPandServlet/Controller
description The requested resource is not available.
Logs:
C:Program Files (x86)apache-tomcat-7.0.34bin>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.34temp"
Using JRE_HOME: "C:Program Files (x86)Javajre7"
Using CLASSPATH: "C:Program Files (x86)apache-tomcat-
7.0.34binbootstrap.jar;C:Program Files (x86)apache-tomcat-
7.0.34bintomcat-juli.jar"
java.lang.UnsatisfiedLinkError: C:Program Files (x86)apache-tomcat-
7.0.34bin
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)Javajre7bin;C:windowsSunJavabin;C:windowssystem32;C:windows;C:Program FilesCommon FilesMicrosoft SharedMicrosoft Online Services;C:Program Files (x86)Common FilesMicrosoft SharedMicrosoft Online Services;C:Program FilesCommon FilesMicrosoft SharedWindows Live;C:Program Files (x86)Common FilesMicrosoft SharedWindows Live;C:Program Files (x86)PHP;C:windowssystem32;C:windows;C:windowsSystem32Wbem;c:Program Files (x86)Microsoft SQLServer100ToolsBinn;c:Program FilesMicrosoft SQL Server100ToolsBinn;c:Program FilesMicrosoft SQL Server100DTSBinn;c:Program Files (x86)Microsoft ASP.NETASP.NET Web Pagesv1.0;c:Program Files (x86)Microsoft SQL Server10
0ToolsBinnVSShellCommon7IDE;c:Program Files (x86)Microsoft SQL Server100DTSBinn;C:Program Files (x86)Windows LiveShared;C:Program FilesTortoiseSVNbin;C:Program FilesMicrosoftWeb Platform Installer;C:Program FilesSourceGearCommonDiffMerge;C:Ruby193bin;.
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
2
Oh man, I found the problem. I had an old JRE in a weird place which was being accessed by JRE_HOME. I removed that dir, fixed my environment variables, and that took care of it.
I just found the solution. The problem was that my JRE_HOME pointed to a 32 bit JRE where in my machine was a 64 bit machine. I installed the 64 bit JRE and replaced it in the system variable and the server started clean
2
Please check your default version pointed by eclipse.Properties->Java Compiler. Switch it to your JRE version installed. This worked for me. Thanks.
Necromancing on a windows server (March 2019). There are several answers on stack overflow, for the problem Can’t load AMD 64-bit .dll on a IA 32-bit platform“. All show just part of the solution. Here is everything together.
The cause: a 32 bit version of Java is used, while the library expects a 64-bit version.
(1) Make sure JAVA_HOME and CATALINA_HOME is set. Something like
set JAVA_HOME=C:Program FilesJavajre1.8.0_201
set CATALINA_HOME=C:Program Files (x86)tomcat-9.0.16
These were the default locations in March 2019. The real versions don’t matter, what is important that the following commands should work:
"%java_home%binjava.exe" -version
"%catalina_home%binconfigtest.bat"
The first command should give you a few lines. One of the lines should say something like
Java HotSpot(TM) 64-bit Server VM
Of course 64-bit only on a 64-bit windows machine. (how to check: windows - run - system information
. It should mention in System Type whether is is a 32 or 54 based system)
The config test shows you the java and catalina home values that are used by TomCat.
If you have the incorrect Java version:
- Uninstall old Java version: Control Panel – (main page) Programs – Uninstall a program
- Go to download Java manual download page. (Google if the link doesn’t work anymore) Don’t do automatic downloads, you might get a different version than you want, depending on your browsers.
- Download windows offline 64-bit Don’t do the online, again: it looks at your browsers to decide whether you want 32 or 64-bit.
- run the installer.
- After installing Java, check your Path and your environment variables and adjust accordingly (In windows server 2012: Control Panel – System and Security – System – Change Settings – Advanced – Environment Variables)
-re-open a command prompt. Check Path and environment variables again and run the tests above.
Please check your Project SDK version used by IDE.
In Intellij IDEA: File -> Project Structure -> Project. In Eclipse: Properties -> Java Compiler.
Switch it to JDK x64 version installed.
The problem I faced with some similar message is that I’ve created shared native library via swig on Linux machine (libmyLic.so) , copied it to Windows, and there was trying to run my java test. This test was supposed to use System.loadLibrary or System.load interface . It doesn’t work, because swig created my shared native library (wrapping C++ code to java) for UNIX environment. when I copied all test to Linux it solves the problem.
For the same message
“Can’t load IA 32-bit .dll on a AMD 64-bit platform”
while trying to run a Jenkins slave on 64 bit windows machine, fixed it by removing JAVA_TOOL_OPTIONS and _JAVA_OPTIONS environment variables which were pointing to 32 bit jvmhook.
If the above answers don’t work, check whether your path variable points to the correct(64- bit or 32-bit) bin folder of Apache Tomcat installation folder. That worked for me.
This error only gets triggered because of the 32bit and 64 bit conflicts for java.
Analysis:
Review initial log while starting tomcat. You will understand will is the java being used for the 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 FilesJavajdk1.8.0_291jre
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
If incorrect architecture is found or the incorrect java path then try to fix that. If for some reason you are getting difficulty for that. Try to rename the incorrect JDK directory. It will start giving error some where. In my case it was complaining about the java for the tomcat server I added to the eclipse. I have to remove and add the tomcat again correcting the right JDK it will be using for the tomcat. This solved by issue.