Re: [jnc-users] SWT compile
Status: Beta
Brought to you by:
soapy
From: Marco T. <mt...@gm...> - 2007-02-17 08:41:58
|
Lee D. Painter wrote: > Hi Marco, > > I had previously had problems with an AWT compile, which after your help > I was able to get working. The corrupted GIF image issue however meant I released a new version of JNC (1.1) which fixes GIFs. But it seems the new GCC version has introduced new trouble with AWT/Swing. I'm on it. So I still recommend to use SWT whenever possible (it will compile flawlessly, binaries will be smaller and the UI looks better). > that we cannot use the compiled .exe so we decided to add an SWT GUI to > our agent, which honestly looks much better but I'm now seeing errors > when attempting to build this. > > A search in our source code shows no trace of AWT or Swing, and the > compile completes with the exclude GUI option. The problem lies in > linking; here are some the errors I'm seeing. Any advice would be very > much appreciated. > > I'm trying to build Windows .exe on Windows with gcc-119844-win. > > c:/tools/javanativecompiler-1.0.1/gcc-119844-win/bin/../lib/gcc/i686-pc- > mingw32/4.2.0/../../../libgcj.a(gui_java_awt.o):gui_java_awt.zip:(.text+ > 0x20): multiple definition of > `java::awt::AWTPermission::AWTPermission(java::lang::String*)' > > c:/tools/javanativecompiler-1.0.1/gcc-119844-win/bin/../lib/gcc/i686-pc- > mingw32/4.2.0/../../../libjncNoGui.a:noGui.jar:(.text+0x290): first > defined here > > c:/tools/javanativecompiler-1.0.1/gcc-119844-win/bin/../lib/gcc/i686-pc- > mingw32/4.2.0/../../../libgcj.a(gui_java_awt.o):gui_java_awt.zip:(.text+ > 0xaa0): multiple definition of > `java::awt::Button::Button(java::lang::String*)' > > c:/tools/javanativecompiler-1.0.1/gcc-119844-win/bin/../lib/gcc/i686-pc- > mingw32/4.2.0/../../../libjncNoGui.a:noGui.jar:(.text+0x2d0): first > defined here > > c:/tools/javanativecompiler-1.0.1/gcc-119844-win/bin/../lib/gcc/i686-pc- > mingw32/4.2.0/../../../libgcj.a(gui_java_awt.o):gui_java_awt.zip:(.text+ > 0xc8f0): multiple definition of > `java::awt::GridBagConstraints::GridBagConstraints(int, int, int, int, > double, double, int, int, java::awt::Insets*, int, int)' > > c:/tools/javanativecompiler-1.0.1/gcc-119844-win/bin/../lib/gcc/i686-pc- > mingw32/4.2.0/../../../libjncNoGui.a:noGui.jar:(.text+0x150): first > defined here > > c:/tools/javanativecompiler-1.0.1/gcc-119844-win/bin/../lib/gcc/i686-pc- > mingw32/4.2.0/../../../libgcj.a(gui_java_awt.o):gui_java_awt.zip:(.text+ > 0xca70): multiple definition of > `java::awt::GridBagLayout::GridBagLayout()' > > c:/tools/javanativecompiler-1.0.1/gcc-119844-win/bin/../lib/gcc/i686-pc- > mingw32/4.2.0/../../../libjncNoGui.a:noGui.jar:(.text+0x130): first > defined here > > c:/tools/javanativecompiler-1.0.1/gcc-119844-win/bin/../lib/gcc/i686-pc- This is explained in the FAQ and in the manual. The problem is that SWT uses AWT for the "org.eclipse.swt.awt" package. I assume you compile the complete swt.jar into your binary. Thus you need AWT what of course unnecessary enlarges the binary. The solution here is to only import referenced classes from swt.jar. That will omit the "org.eclipse.swt.awt" package and additionally have the advantage of create a smaller binary. But please read the manual topic "Step 1 of 4: Source" since it will create new difficulties you have to consider. It's just a 10 lines description, so you won't have to spend a lot of time reading it :-) Marco > Regards > > Lee >> -----Original Message----- >> From: jav...@li... >> [mailto:jav...@li...] On Behalf Of >> Marco Trudel >> Sent: 15 February 2007 08:02 >> To: Steven Blade; A mailing list for general questions and > discussions. >> Subject: Re: [jnc-users] [javaCompiler-users] compiles and executes > but >> throws java exception --help >> >> Please always do "reply all", else we loose the mailinglist... >> >> >> Steven Blade wrote: >>> ok sure thing but please show me where to use the static block of > code >> ok. >> >> Thanks for the sample. Just put that code in an own class (as the >> attached XmlLoader.java) and add this class to the JNC compilation >> source. This will ensure that the needed objects are pulled into the >> binary. >> You do not have to change your source. >> >> >>> did it work both ways with you reading and transforming xml ? >> Reading works, writing (transforming) fails. I'll create a bugreport >> (it's probably a GNU classpath bug) and hope that the fix will be in > JNC >> 1.2. >> >>> one more thing does that mean i have to use gnu's jar instead of > java's >> ? >> >> No, you only have to ensure that your binary contains the xml stuff. >> This is done with the static initializer since it references the xml >> stuff and thus ld - the linker - will add them. >> >> >> Marco >> >> >>> import java.io.BufferedReader; >>> import java.io.File; >>> import java.io.InputStreamReader; >>> >>> import javax.xml.parsers.SAXParser; >>> import javax.xml.parsers.SAXParserFactory; >>> import javax.xml.transform.OutputKeys; >>> import javax.xml.transform.Transformer; >>> import javax.xml.transform.sax.SAXTransformerFactory; >>> import javax.xml.transform.sax.TransformerHandler; >>> import javax.xml.transform.stream.StreamResult; >>> >>> import org.xml.sax.Attributes; >>> import org.xml.sax.SAXException; >>> import org.xml.sax.helpers.AttributesImpl; >>> import org.xml.sax.helpers.DefaultHandler; >>> >>> >>> public class Foo extends DefaultHandler{ >>> >>> /** >>> * @param args >>> */ >>> private static File file; >>> private static String contents; >>> private static Foo f=new Foo(); >>> public static void main(String[] args) { >>> // TODO Auto-generated method stub >>> System.out.print("enter location of xml file to read "); >>> BufferedReader input=new BufferedReader(new >> InputStreamReader(System.in)); >>> try >>> { >>> String sfile=input.readLine(); >>> file=new File(sfile); >>> readXml(); >>> System.out.print(contents); >>> writeXml(); >>> }catch(Exception _){_.printStackTrace();} >>> } >>> private static void writeXml() >>> { >>> SAXTransformerFactory >> factory=(SAXTransformerFactory)SAXTransformerFactory.newInstance(); >>> try{ >>> StreamResult stream=new StreamResult(System.out); >>> TransformerHandler handler=factory.newTransformerHandler(); >>> Transformer trans=handler.getTransformer(); >>> trans.setOutputProperty (OutputKeys.ENCODING,"ISO-8859-1"); >>> trans.setOutputProperty(OutputKeys.INDENT,"yes"); >>> handler.setResult(stream); >>> handler.startDocument(); >>> AttributesImpl atts=new AttributesImpl(); >>> handler.startElement("", "", "test", atts); >>> atts.clear(); >>> handler.startElement("", "", "foo", atts); >>> handler.characters(new char[]{'a','b','c'}, 0, 3); >>> handler.endElement("", "", "foo"); >>> handler.endElement("", "", "test"); >>> handler.endDocument(); >>> }catch(Exception _){_.printStackTrace();} >>> } >>> >>> private static void readXml() >>> { >>> System.out.println("reading xml..."); >>> try{ >>> SAXParserFactory factory=SAXParserFactory.newInstance(); // > the >> exception points to this line >>> factory.setValidating(false); >>> SAXParser parser=factory.newSAXParser(); >>> parser.parse (file, f.new OwnHandler()); >>> } >>> catch(Exception _){_.printStackTrace();} >>> } >>> >>> private class OwnHandler extends DefaultHandler{ >>> >>> public void startElement(String namespaceURI, >>> String sName, >>> String qName, >>> Attributes attrs) throws SAXException{ >>> contents+="<"+qName+">"; >>> } >>> public void endElement(String uri, String localName, String > qName) >> throws SAXException{ >>> contents+="<"+qName+"/>"; >>> } >>> public void characters(char[] buf,int offset,int length)throws >> SAXException{ >>> contents+=new String(buf,offset,length); >>> } >>> } >>> } >>> >>> >>> >>> >>> > ------------------------------------------------------------------------ >>> <?xml version=1.0 encoding=UTF-8?> >>> <test> >>> <line>testing java native compiler</line> >>> </test> > > > ------------------------------------------------------------------------- > Take Surveys. Earn Cash. Influence the Future of IT > Join SourceForge.net's Techsay panel and you'll get the chance to share your > opinions on IT & business topics through brief surveys-and earn cash > http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV > _______________________________________________ > javaCompiler-users mailing list > jav...@li... > https://lists.sourceforge.net/lists/listinfo/javacompiler-users > |