Zum Inhalt springen

mit gcj jar ausführbar machen


Asgar13

Empfohlene Beiträge

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

*.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 von flashpixx
Link zu diesem Kommentar
Auf anderen Seiten teilen

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 von Asgar13
Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 von flashpixx
Code-Tags eingefügt
Link zu diesem Kommentar
Auf anderen Seiten teilen

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 von Asgar13
Link zu diesem Kommentar
Auf anderen Seiten teilen

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

:(

Link zu diesem Kommentar
Auf anderen Seiten teilen

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 von Asgar13
Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 2 Wochen später...

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...