Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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.

*.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

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.

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

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

Danke für den Tipp und die Hilfe^^

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

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?

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

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

:(

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

  • 2 Wochen später...

Fehler gefunden!!!

Kaputtes Paket :pssst:

Wie linkt, oder verbindet man mit dem gcj, die Datei?

Datei: libxxx.so

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

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.