Asgar13 Geschrieben 15. November 2010 Teilen Geschrieben 15. November 2010 Hallo, ich versuche ein jar-Verzeichnis mit dem gcj zu einer ausführbaren Datei zu machen(ohne eine VM), um die ausführbare Datei auf eine andere Plattform laufen zu lassen. Problem: Wie geht das? gcj --main=testmain -o testmain testmain.o /tmp/cczvelag.o: In function `main': ccM7NCaQ.i:(.text+0x2b): undefined reference to `test::class$' collect2: ld returned 1 exit status gcj -c jarfile.jar -o jarfile.o erstellt mir eine .o datei, die nicht ausführbar ist mit ./ Bitte ein Beispiel posten. Danke schonmal für die Hilfe. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 15. November 2010 Teilen Geschrieben 15. November 2010 (bearbeitet) *.o Dateien sind keine Executables. Du musst diese Dateien dann noch binden bzw linken, damit Du ein Executable erhältst. Die -o Option (Output) erzeugt das Exectuable. Die Fehlermeldung ist ein Linkerfehler, d.h. hier wird aus irgendwelche Gründen eben nicht die zugehörige Bibliothek gefunden. Ich würde darauf tippen, dass der gcj analog zum G++ / GCC die Bibliothek, die gelinkt werden soll als Parameter erwartet bzw diese auch in einem bekannten Pfad liegen muss (Umgebungsvariable LIBRARY_PATH) Bearbeitet 15. November 2010 von flashpixx Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Asgar13 Geschrieben 15. November 2010 Autor Teilen Geschrieben 15. November 2010 Das jar-Paket ist nur ein Testpaket, d.h. da drin ist "Hallo World" namens test.class. Welche lib verwendet diese? einbinden kann ich ja mit -l. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 15. November 2010 Teilen Geschrieben 15. November 2010 Bitte einmal lesen Compiling Java with GCJ | Linux Journal Du musst anhand der Parameter des gcj unterscheiden, ob Du eine Source Datei oder einen Bytecode vorliegen hast. Du erzeugst erst aus den Java Klassen / Sourcen Object-Dateien und diese linkst Du dann in das Executable (analog zu C bzw C++) Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Asgar13 Geschrieben 15. November 2010 Autor Teilen Geschrieben 15. November 2010 (bearbeitet) Applications are deployed differently (a Java Archive .jar file, rather than an executable); they require a big runtime system, and calling between Java and C/C++ is slow and inconvenient. Das meinst du oder? Statt .jar Datei, dann eine ausführbare Datei. Falls ich mich irgendwie falsch ausgedrückt habe tut es mir leid. Ich will die .jar als Javabytecode benutzen um daraus eine native machine code zu machen. Ich glaube mit deinen Post willst du auf -c oder -o hinweisen. -c Javabytecode Endung .class -o native machine code .exe Mit der Eingabe von: gcj --classpath=test.jar -o testit antwortet der PC: gcj: no input files Wenn ich noch dahinter test.class dranhänge, sucht er die main. Wenn ich ihn dabei die main gebe, nimmt er die test.java, nicht die test.class. Bearbeitet 15. November 2010 von Asgar13 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Asgar13 Geschrieben 15. November 2010 Autor Teilen Geschrieben 15. November 2010 Sorry, war mit den Beitrag hierüber total daneben. Du meintest wohl: gcj -c jarfile.jar -o jarfile.o und die daraus entstehende Datei (Link) in den Befehl: gcj --main=MyJavaProg -o MyJavaProg MyJavaProg.o einfügen. z.B. gcj -c test.jar -o test.o gcj --main=test -o test test.o Jetzt funktioniert es Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 16. November 2010 Teilen Geschrieben 16. November 2010 Ja, genau das meinte ich. Ich würde Dir aber aus Bequemlichkeit, wenn Du so etwas häufiger bauen musst, eine make ? Wikipedia empfehlen Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Asgar13 Geschrieben 17. November 2010 Autor Teilen Geschrieben 17. November 2010 Danke für den Tipp und die Hilfe^^ Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Asgar13 Geschrieben 17. November 2010 Autor Teilen Geschrieben 17. November 2010 (bearbeitet) Nächstes Problem mit den GCJ: Programm: package meinpackage1; import org.apache.log4j.*; public class Main { private static Logger logger = Logger.getRootLogger(); public static void main( String[] args ) { try { SimpleLayout layout = new SimpleLayout(); ConsoleAppender consoleAppender = new ConsoleAppender( layout ); logger.addAppender( consoleAppender ); FileAppender fileAppender = new FileAppender( layout, "logs/MeineLogDatei.log", false ); logger.addAppender( fileAppender ); // ALL | DEBUG | INFO | WARN | ERROR | FATAL | OFF: logger.setLevel( Level.WARN ); } catch( Exception ex ) { System.out.println( ex ); } logger.debug( "Meine Debug-Meldung" ); logger.info( "Meine Info-Meldung" ); logger.warn( "Meine Warn-Meldung" ); logger.error( "Meine Error-Meldung" ); logger.fatal( "Meine Fatal-Meldung" ); } } Ist nicht meins!!!! Ich will insgesamt testen, ob und wie man auf den GCJ Dateien mit externen Librarys ausführbar macht. Name der Datei: Main.java Von java zu class: >gcj -C Main.java --classpath=/home/a/Desktop/log4j-test/bin/lib/apache-log4j-1.2.16/log4j-1.2.16.jar Was passiert, dabei mit dem package? Danach bekomme ich nur Fehlermeldungen! z.B. meinpackage1/Main.java: In class 'meinpackage1.Main': meinpackage1/Main.java: In method 'meinpackage1.Main.<clinit>()': meinpackage1/Main.java:6: error: cannot find file for class org.apache.log4j.Logger meinpackage1/Main.java:6: error: class 'org.apache.log4j.Logger' has no method named 'getRootLogger' matching signature '()Lorg/apache/log4j/Logger;' meinpackage1/Main.java: In method 'meinpackage1.Main.main(java.lang.String[])': meinpackage1/Main.java:11: error: cannot find file for class org.apache.log4j.SimpleLayout meinpackage1/Main.java:11: confused by earlier errors, bailing out Bearbeitet 17. November 2010 von flashpixx Code-Tags eingefügt Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 17. November 2010 Teilen Geschrieben 17. November 2010 Lies doch bitte die Fehlermeldungen und verwende die Code-Tags. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Asgar13 Geschrieben 18. November 2010 Autor Teilen Geschrieben 18. November 2010 1. Er findet die Logger.class und die SimpleLayout.class finden, obwohl Sie vorhanden sind. 2. Findet er den Befehl getRootLogger nicht. Das Problem dabei ist, dass ich die Source Codes nicht habe. Was macht man in so einem Fall? Oder verstehe ich dich falsch? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 18. November 2010 Teilen Geschrieben 18. November 2010 Du brauchst die Sourcecodes nicht, gcj kann einmal die Objectdateien aus Sourcescodes und einmal aus den Bytecodeklassen erzeugen und diese musst Du nur dann zusammen linken Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Asgar13 Geschrieben 18. November 2010 Autor Teilen Geschrieben 18. November 2010 (bearbeitet) Habe ich auch schon mal versucht gcj -c log4j-1.2.16.jar -o log4j.o org/apache/log4j/net/JMSAppender.java: In class 'org.apache.log4j.net.JMSAppender': org/apache/log4j/net/JMSAppender.java: In method 'org.apache.log4j.net.JMSAppender.activateOptions()': org/apache/log4j/net/JMSAppender.java:178: error: cannot find file for class javax.jms.TopicConnection org/apache/log4j/net/JMSAppender.java:178: confused by earlier errors, bailing out Findet javax/jms/TopicConnection nicht. Quellcode vom Internet: http://www.docjar.com/html/api/org/apache/log4j/net/JMSAppender.java.html Bearbeitet 18. November 2010 von Asgar13 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 18. November 2010 Teilen Geschrieben 18. November 2010 Findet javax/jms/TopicConnection nicht. Dann sorge dafür, dass sie vorhanden ist Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Asgar13 Geschrieben 22. November 2010 Autor Teilen Geschrieben 22. November 2010 gcj --main=main -o Main.o Log.o /tmp/ccZNmSWt.o: In function `main': ccQ5p3sK.i:(.text+0x2b): undefined reference to `main::class$' log.o: In function `org::apache::log4j::nt::NTEventLogAppender::NTEventLogAppender(java::lang::String*, java::lang::String*, org::apache::log4j::Layout*)': log.jar:(.text+0x52874): undefined reference to `hidden alias for int org::apache::log4j::nt::NTEventLogAppender::registerEventSource(java::lang::String*, java::lang::String*)' log.o: In function `void org::apache::log4j::nt::NTEventLogAppender::activateOptions()': log.jar:(.text+0x52993): undefined reference to `hidden alias for int org::apache::log4j::nt::NTEventLogAppender::registerEventSource(java::lang::String*, java::lang::String*)' log.o: In function `void org::apache::log4j::nt::NTEventLogAppender::append(org::apache::log4j::spi::LoggingEvent*)': log.jar:(.text+0x52d08): undefined reference to `hidden alias for void org::apache::log4j::nt::NTEventLogAppender::reportEvent(int, java::lang::String*, int)' log.o: In function `void org::apache::log4j::nt::NTEventLogAppender::finalize()': log.jar:(.text+0x52d55): undefined reference to `hidden alias for void org::apache::log4j::nt::NTEventLogAppender::deregisterEventSource(int)' log.o: In function `void com::sun::mail::imap::IMAPFolder::open(int)': log.jar:(.text+0x18aa5d): undefined reference to `.L25522' log.jar:(.text+0x18aab8): undefined reference to `.L25529' log.jar:(.text+0x18aafa): undefined reference to `.L25532' log.jar:(.text+0x18ae85): undefined reference to `.L25539' log.jar:(.text+0x18b0b8): undefined reference to `.L25559' log.jar:(.text+0x18b0fa): undefined reference to `.L25562' log.o: In function `com::sun::mail::imap::protocol::IMAPProtocol* com::sun::mail::imap::IMAPStore::getProtocol(com::sun::mail::imap::IMAPFolder*)': log.jar:(.text+0x1a5cb7): undefined reference to `.L27145' log.jar:(.text+0x1a5cf9): undefined reference to `.L27150' log.o: In function `java::net::Socket* com::sun::mail::util::SocketFetcher::createSocket(java::net::InetAddress*, int, java::lang::String*, int, int, java::util::Properties*, java::lang::String*, javax::net::SocketFactory*, bool, bool)': log.jar:(.text+0x2067a3): undefined reference to `.L32094' log.jar:(.text+0x2067ef): undefined reference to `.L32099' log.o: In function `java::net::Socket* com::sun::mail::util::SocketFetcher::startTLS(java::net::Socket*, java::lang::String*, java::util::Properties*, java::lang::String*)': log.jar:(.text+0x20859b): undefined reference to `.L32184' log.jar:(.text+0x2085dd): undefined reference to `.L32189' log.o: In function `bool com::sun::mail::pop3::POP3Folder::isOpen()': log.jar:(.text+0x226613): undefined reference to `.L34171' log.jar:(.text+0x226641): undefined reference to `.L34178' log.jar:(.text+0x226667): undefined reference to `.L34181' log.o: In function `bool com::sun::mail::pop3::POP3Store::isConnected()': log.jar:(.text+0x233284): undefined reference to `.L35085' log.jar:(.text+0x2332b2): undefined reference to `.L35092' log.jar:(.text+0x2332d8): undefined reference to `.L35095' log.o: In function `com::sun::mail::pop3::Protocol* com::sun::mail::pop3::POP3Store::getPort(com::sun::mail::pop3::POP3Folder*)': log.jar:(.text+0x233baf): undefined reference to `.L35129' log.jar:(.text+0x233c0a): undefined reference to `.L35136' log.jar:(.text+0x233c4c): undefined reference to `.L35139' log.jar:(.text+0x23422f): undefined reference to `.L35148' log.jar:(.text+0x23427e): undefined reference to `.L35155' log.jar:(.text+0x2342c0): undefined reference to `.L35158' log.o:(.data+0xfa50): undefined reference to `hidden alias for int org::apache::log4j::nt::NTEventLogAppender::registerEventSource(java::lang::String*, java::lang::String*)' log.o:(.data+0xfa64): undefined reference to `hidden alias for void org::apache::log4j::nt::NTEventLogAppender::reportEvent(int, java::lang::String*, int)' log.o:(.data+0xfa78): undefined reference to `hidden alias for void org::apache::log4j::nt::NTEventLogAppender::deregisterEventSource(int)' collect2: ld returned 1 exit status Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Asgar13 Geschrieben 22. November 2010 Autor Teilen Geschrieben 22. November 2010 (bearbeitet) Fehler liegt im --main=main Was muss ich stattdessen in --main= schreiben? Habe diese Zeile nicht mehr in Sourcecode: package meinpackage1; Meine Verzeichnisstruktur: log4j -> bin -> lib -> logs -> src ->Main.o, Main.java, log.o, Log.jar -> apachelog4j Bearbeitet 22. November 2010 von Asgar13 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Asgar13 Geschrieben 2. Dezember 2010 Autor Teilen Geschrieben 2. Dezember 2010 Fehler gefunden!!! Kaputtes Paket :pssst: Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Asgar13 Geschrieben 3. Dezember 2010 Autor Teilen Geschrieben 3. Dezember 2010 Wie linkt, oder verbindet man mit dem gcj, die Datei? Datei: libxxx.so Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Asgar13 Geschrieben 10. Dezember 2010 Autor Teilen Geschrieben 10. Dezember 2010 Fehler: undefined reference to ` Behebbar durch --main=richtigeMain Bei jar-paketen auf METAFILE sehen, da steht diese drin und -fjni Paket.jar/direktes_laden.class Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.