Cannot load 64-bit SWT libraries on 32-bit JVM ( replacing SWT file )
Asked Answered
B

13

26

I'm trying to debug this problem but not sure where exactly i need to replace SWT jar file for Eclipse.

Current System Config:

Eclipse Helios 3.6 - 32 Bit
JDK 1.6 
JVM - 32 Bit 
Windows 7 - 64 Bit

Error Message:

java.lang.UnsatisfiedLinkError: Cannot load 64-bit SWT libraries on 32-bit JVM
    at org.eclipse.swt.internal.Library.loadLibrary(Library.java:194)
    at org.eclipse.swt.internal.Library.loadLibrary(Library.java:174)
    at org.eclipse.swt.internal.C.<clinit>(C.java:21)
    at org.eclipse.swt.widgets.Display.<clinit>(Display.java:138)
    at org.eclipse.ui.internal.Workbench.createDisplay(Workbench.java:687)
    at org.eclipse.ui.PlatformUI.createDisplay(PlatformUI.java:161)
    at de.vogella.rcp.intro.first.Application.start(Application.java:18)
    at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
    at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369)
    at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:620)
    at org.eclipse.equinox.launcher.Main.basicRun(Main.java:575)
    at org.eclipse.equinox.launcher.Main.run(Main.java:1408)
    at org.eclipse.equinox.launcher.Main.main(Main.java:1384)
An error has occurred. See the log file

Workaround:

  1. Link1: Understood the cause of the problem and i tried to replace 64-bit SWT to 32 Bit but i'm not sure whether i'm doing it right ?

    downloaded 32-bit file swt-3.6.1-win32-win32-x86.zip Extracted the zip file Have files as shown below

    enter image description here

    copied swt.jar file navigated to C:\Program Files\eclipse\plugins removed 64-bit Swt file ( i.e org.eclipse.swt.win32.win32.x86_64.source_3.6.2.v3659c ) placed copied swt.jar file and relaunched

    Still throws SAME ERROR

    also tried renaming the swt.jar file to org.eclipse.swt.win32.win32.x86_64.source_3.6.2.v3659c

    Still same ERROR

  2. Link2: Suggested the alternative solution but couldn't resolve the problem.

    Still same ERROR

  3. I really don't want to uninstall 32-JVM and 32-Bit Eclipse and install corresponding 64 Bit versions.

    Not an OPTION

Workaround After the paulsm4 and Paul Webster response & i'm confused

When i tried executing this to check JVM, JRE version in Eclipse

package javaVersion;

public class JavaVersion
{

    public static void main( String[] args )
    {
        System.out.println( "JRE Version :" + System.getProperty( "java.runtime.version" ) );
        System.out.println( "JVM Bit size: " + System.getProperty( "sun.arch.data.model" ) );

    }

}

Output:

1.6.0_31-b05
JVM Bit size: 32

However when i tried on command line for JAVA - VERSION

enter image description here

So my understanding system has 64bit JVM where as Eclispe is reading 32 Bit JVM. So how can i divert system to read 32 Bit JVM ?

Bowery answered 13/6, 2012 at 20:12 Comment(4)
The file you would replace is the org.eclipse.swt.win32.win32.x86_64_3.6.2.v3659c.jar with the swt.jar. Not the one with source in its name.Hushhush
What's raising the error? Is it your Eclipse or the application you're developing?Lanita
@PaulWebster : when i did that Eclispe throws an error " An error has occurred. See the log file"Bowery
It would matter what the log file says. Maybe you could update your question with "tried this and got this log entry"Hushhush
V
28

Eclipse is launching your application with whatever JRE you defined in your launch configuration. Since you're running the 32-bit Eclipse, you're running/debugging against its 32-bit SWT libraries, and you'll need to run a 32-bit JRE.

Your 64-bit JRE is, for whatever reason, your default Installed JRE.

To change this, first make sure you have a 32-bit JRE configured in the Installed JREs preference. Go to Window -> Preferences and navigate to Java -> Installed JREs:

Installed JREs

You can click Add and navigate to your 32-bit JVM's JAVA_HOME to add it.

Then in your Run Configuration, find your Eclipse Application and make sure the Runtime JRE is set to the 32-bit JRE you just configured:

Run Configuration

(Note the combobox that is poorly highlighted.)

Don't try replacing SWT jars, that will likely end poorly.

Veats answered 14/6, 2012 at 17:20 Comment(4)
Huh? The error message says Cannot load 64-bit SWT libraries on 32-bit JVM meaning he needs to get either a 32-bit SWT or a 64-bit JVM. You're suggesting he add a 32 bit JVM, which he already has.Publus
@Imray Indeed, he does already have one, since that's how he's running his 32-bit installation of Eclipse. But he also has a 64-bit JRE installed, since that's the default in Eclipse. I'm telling him to change his default JRE to the 32-bit version so that it matches the one that launched Eclipse and he can subsequently link against 32-bit SWT libraries.Veats
This answer is very misleading and does not solve the actual problem. The error says that Eclipse is using 32-bit Java to compile the application. But the problem is SWT is in 64-Bit!!! So, the issue is the downloaded SWT is probably not 32-bit!Quelpart
FYI I reported this as a bug... because I am also having the same problem. Downloaded 32-bit SWT, tried to compile it against 32-bit Java but I still receive 64-bit SWT cannot link error. You guys should vote so it gets noticed bugs.eclipse.org/bugs/show_bug.cgi?id=428855Quelpart
T
8

Well, duh :) SWT uses JNI ... and JNI is strictly platform specific.

Use 32-bit libraries with a 32-bit JVM, 64-bit libraries with a 64-bit JVM, make sure the versions match exactly, and don't mix'n'match.

IMHO...

PS: You can have multiple JVMs and/or multiple Eclipse's co-existing on the same box.

Transmitter answered 13/6, 2012 at 20:15 Comment(1)
I second this. Simply get a 32-bit eclipse if you've got a 32-bit JVM.Hushhush
I
8

i removed C:\ProgramData\Oracle\Java\javapath from my path, and it worked for me.

and make sure you include x64 JDK and JRE addresses in your path.

Irritability answered 15/3, 2015 at 18:26 Comment(3)
My system was working fine before a Java update. This is all it took to make it work again.Previdi
I encountered same issue 'Oracle\java' in the PATH. Once I placed my JDK 1.8 before other java in the path, it worked like a charmToxicogenic
yes , I would have to think as it was working before the update. thanksKimsey
C
3

Just add -d32 to VM arguments in the "Edit launch configuration properties".

Casemate answered 12/1, 2014 at 17:20 Comment(0)
B
1

Thanks a lot guys!

I overlooked my ECLIPSE VERSION it was 64Bit and 3.6

I had to make sure it's 32Bit Eclipse, 32 Bit JVM so i uninstalled Eclipse & all JVM for clean start. Installed 32Bit JDK1.6 from here and 32Bit Eclipse from here

Bowery answered 14/6, 2012 at 19:9 Comment(0)
C
1

I just replaced the swt.jar in my package with the 64bit version and it worked straight away. No need to recompile the whole package, just replace the swt.jar file and make sure your application manifest includes it.

Contrary answered 11/10, 2012 at 3:24 Comment(0)
F
1

I also faced the same problem a long time ago.

Here is the Solution

In Eclipse Click on "Windows"-->"Preferences"---->"Java"---> "Installed JREs"---->Select the JDK, click on "Edit".

Check your JDK path, is it according to your path in environmental variables defined in system. if not then change it to "path" defined directory.

Fung answered 26/8, 2013 at 6:13 Comment(0)
P
1

Check the target definition if you are working with an RCP-SWT project.

Open the target editor of and navigate to the environent definition. There you can set the architecture. The idea is that by starting up your RCP application then only the 32 bit SWT libraries/bundles will be loaded. If you have already a runtime configuration it is advisable to create a new one as well.

Target Editor in Eclipse

Phonate answered 8/3, 2016 at 12:26 Comment(0)
M
1

I removed C:\ProgramData\Oracle\Java\javapath from my path, and it worked for me.

But make sure you include x64 JDK and JRE addresses in your path.

Merkel answered 7/6, 2016 at 5:10 Comment(0)
M
1

So , just make sure that you are on the right environment i.e 32 bit SWT LIBRARIES should match 32 bit JVM , vice versa.

I solved this problem by installing 64-bit jdk ,64-bit jre and finally by adding setting the jdk path in environment variables adn adding jre to the eclipse.

Marrakech answered 13/4, 2018 at 7:2 Comment(0)
B
0

Install a JDK.

It's possible to get Eclipse to run with a JRE, or at least it used to be, but why bother? Eclipse is much happier with a JDK.

Remember that the JRE that is used to run Eclipse does not have to be the JRE that Eclipse uses to run an application.

PS. I'm assuming here that the original poster's problem was getting Eclipse to start, and not (as some other Answers seem to address) getting Eclipse to start an application.

Bassorilievo answered 30/11, 2014 at 3:17 Comment(0)
L
0

Go to Path C:\ProgramData\Oracle\Java\javapath (This path is in my case might be different in your case). Rename the folder ORACLE with other name line ORACLE_OLD. And Restart the STS/IDE . This works for me

Lambeth answered 27/3, 2018 at 3:42 Comment(0)
R
-1

I removed C:\ProgramData\Oracle\Java\javapath from my path, and it worked for me. Perfect Answer, Thanks Nikil.

Reheat answered 16/11, 2017 at 14:47 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.