Problem

이클립스나 STS 가 다음과 같은 에러를 내며 구동되지 않음

원인

64bit Windows 에서 발생하며 원인은 이클립스의 비트수와 JDK 의 비트수가 맞지 않아서 발생하며 더 자세한 원인을 확인하려면 이클립스의 configuration 폴더에서 .log 을 열어보면 됨.

로그 파일에는 JVM Stack trace 를 남으며 예로 다음과 같이 32bit JVM 에서 64-bit 이클립스를 실행할 수 없다는 에러가 표시됨.

stack trace

!SESSION 2015-05-25 15:56:07.065 -----------------------------------------------
eclipse.buildId=3.6.4.201503100339-RELEASE-e44
java.version=1.8.0_45
java.vendor=Oracle Corporation
BootLoader constants: OS=win32, ARCH=x86_64, WS=win32, NL=ko_KR
Framework arguments: -product org.springsource.sts.ide
Command-line arguments: -os win32 -ws win32 -arch x86_64 -product org.springsource.sts.ide

!ENTRY org.eclipse.osgi 4 0 2015-05-25 15:56:09.483
!MESSAGE Application error
!STACK 1
java.lang.UnsatisfiedLinkError: Cannot load 64-bit SWT libraries on 32-bit JVM
at org.eclipse.swt.internal.Library.loadLibrary(Library.java:256)
at org.eclipse.swt.internal.Library.loadLibrary(Library.java:236)
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:716)
at org.eclipse.ui.PlatformUI.createDisplay(PlatformUI.java:162)
at org.eclipse.ui.internal.ide.application.IDEApplication.createDisplay(IDEApplication.java:165)
at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:107)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:380)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:235)
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.eclipse.equinox.launcher.Main.invokeFramework(Main.java:648)
at org.eclipse.equinox.launcher.Main.basicRun(Main.java:603)
at org.eclipse.equinox.launcher.Main.run(Main.java:1465)
at org.eclipse.equinox.launcher.Main.main(Main.java:1438)

eclipse 가 64비트이면 JDK 도 64여야 하며 eclipse 가 32비트일 경우 JDK 도 32비트를 설치해야 하며 여러 개의 JDK 가 설치된 경우 비트에 맞는 JDK 가 실행되도록 PATH 나 환경 변수 조정

 

해결

두 가지 해결책이 있음

  1. 현재 JDK 와 이클립스의 비트수가 일치하도록 JDK 와 이클립스 재설치
  2. 이클립스에 맞는 JDK 가 이미 설치되어 있을 경우 eclipse.ini 에 -vm 옵션으로 명시적으로 사용할 VM 을 지정한다.

    -vm
    C:\Program Files\Java\jre7\bin
    -vmargs
    -Xmx768m
    ...

    -vm 옵션은 -vmargs 옵션보다 앞에 위치해야 하며 파라미터는 java.exe 나 javaw.exe 등의 JVM 파일이 위치하는 디렉터리명을 주어야 제대로 동작함.

Ref