1
votes

I am trying to build a package to run my SWT app outside eclipse.

Under linux i've succefuly manage to run under bash. But when I try to run under windows I am getting the following error:

C:\nanoffline>java -cp "SebraeNaNOffline_lib_win_x86/*" -jar SebraeNaNOffline.jar Exception in thread "main" java.lang.UnsatisfiedLinkError: Cannot load 64-bit SW T libraries on 32-bit JVM at org.eclipse.swt.internal.Library.loadLibrary(Library.java:214) at org.eclipse.swt.internal.Library.loadLibrary(Library.java:194) at org.eclipse.swt.internal.C.(C.java:21) at org.eclipse.swt.internal.Converter.wcsToMbcs(Converter.java:63) at org.eclipse.swt.internal.Converter.wcsToMbcs(Converter.java:54) at org.eclipse.swt.widgets.Display.(Display.java:132) at br.com.infosolo.sebrae.nanoffline.IniciarOffline.(IniciarOffl ine.java:31)

I already try specify the parameter -Djava.library.path, put the SWT's DLLs to windows, windows/system, windows/system32...

I am using the following SWT JAR (shipped with eclipse 32bit windows distribution: org.eclipse.swt.win32.win32.x86_3.100.1.v4234e.jar

The complete jar list under classpath:

antlr-2.7.7.jar com.ibm.icu_4.4.2.v20110823.jar commons-beanutils-1.8.3.jar commons-collections-3.2.1.jar commons-digester-1.8.jar commons-lang-2.5.jar commons-logging-1.1.1.jar dom4j-1.6.1.jar hibernate-commons-annotations-4.0.1.Final.jar hibernate-core-4.1.9.Final.jar hibernate-entitymanager-4.1.9.Final.jar hibernate-jpa-2.0-api-1.0.1.Final.jar iText-2.1.7.jar jasperreports-4.8.0.jar jasperreports-fonts-4.8.0_0.jar javassist-3.17.1-GA.jar jboss-logging-3.1.0.GA.jar jboss-transaction-api_1.1_spec-1.0.0.Final.jar org.eclipse.core.commands_3.6.0.I20110111-0800.jar org.eclipse.core.databinding.beans_1.2.100.I20100824-0800.jar org.eclipse.core.databinding.observable_1.4.0.I20110222-0800.jar org.eclipse.core.databinding.property_1.4.0.I20110222-0800.jar org.eclipse.core.databinding_1.4.0.I20110111-0800.jar org.eclipse.core.runtime_3.7.0.v20110110.jar org.eclipse.equinox.common_3.6.0.v20110523.jar org.eclipse.equinox.registry_3.5.101.R37x_v20110810-1611.jar org.eclipse.jface.databinding_1.5.0.I20100907-0800.jar org.eclipse.jface.text_3.7.2.v20111213-1208.jar org.eclipse.jface_3.7.0.v20110928-1505.jar org.eclipse.nebula.widgets.formattedtext_1.0.0.201301250959.jar org.eclipse.osgi_3.7.2.v20120110-1415.jar org.eclipse.swt.win32.win32.x86_3.100.1.v4234e.jar org.eclipse.swt_3.100.1.v4234e.jar org.eclipse.text_3.5.101.v20110928-1504.jar org.eclipse.ui.forms_3.5.101.v20111011-1919.jar org.eclipse.ui.workbench_3.7.1.v20120104-1859.jar sqlite-jdbc-3.7.15-SNAPSHOT.jar swt-awt-win32-4234.dll swt-gdip-win32-4234.dll 77.824 swt-webkit-win32-4234.dll swt-wgl-win32-4234.dll swt-win32-4234.dll swt-xulrunner-win32-4234.dll weld-se-core.jar weld-se.jar


I tried to extract the swt dll's (inside swt jar) but i got the same error (specifing the -Djava.library.path parameter).

My windows is Windows XP 32bit and the JVM is 1.7.0_13 32 bit.

When i try to run under windows 64bit (windows8) with x64 swt libs, the following happens: C:\nanoffline>java -cp "SebraeNaNOffline_lib_win/*" -jar SebraeNaNOffline.jar Exception in thread "main" java.lang.UnsatisfiedLinkError: Could not load SWT li brary. Reasons: no swt-gtk-3740 in java.library.path no swt-gtk in java.library.path Can't load library: C:\Users\Infosolo.swt\lib\win32\x86_64\swt-gtk-3740 .dll Can't load library: C:\Users\Infosolo.swt\lib\win32\x86_64\swt-gtk.dll

    at org.eclipse.swt.internal.Library.loadLibrary(Library.java:285)
    at org.eclipse.swt.internal.Library.loadLibrary(Library.java:194)
    at org.eclipse.swt.internal.C.<clinit>(C.java:21)
    at org.eclipse.swt.internal.Converter.wcsToMbcs(Converter.java:63)
    at org.eclipse.swt.internal.Converter.wcsToMbcs(Converter.java:54)
    at org.eclipse.swt.widgets.Display.<clinit>(Display.java:132)
    at br.com.infosolo.sebrae.nanoffline.IniciarOffline.<clinit>(IniciarOffl

ine.java:31)


Running the swt app under Eclipse (launching from eclipse), everything works ok.

Thanks in advance.

1

1 Answers

0
votes

My problem was with META-INF\MANIFEST.MF archive.

The manifest was referencing linux gtk SWT jar.

Now i have changed all SWT LIBs to the common name swt.jar. When I change the platform i just need to replace the jar with the same name without needing change the manifest file.