Zu blöd simpelstes Prgramm zu kompilieren.



  • Wir haben ein Programm fest vorgegeben bekommen, dass kompiliert werde soll.

    Expr.java

    public class Expr{
    	public static int foo(int a, int b, int c, int d){
    		return a * b + c / d - 1;
    	}
    }
    

    Ich benutze den Kompiler gcj, der folgende Fehlermeldung ausgibt:

    arne@arne-desktop:~/Arbeitsbereich/Infostudy/Java/Projekt1$ gcj Expr.java
    /usr/lib/gcc/i486-linux-gnu/4.1.2/../../../../lib/crt1.o: In function `_start':
    (.text+0x18): undefined reference to `main'
    collect2: ld returned 1 exit status
    

    ich hab mir gedacht, vieleicht liegt es daran, dass die Main Methode fehlt, aber als ich sie mit eingebastelt habe, und sonst auch keinen weiterer Fehler aufgetreten ist, kam genau die Gleiche Fehlermeldung.

    Mein Betriebssystem ist wie man erkennen kann Linux, um genauer zu sein Kubuntu.



  • Hm am besten ist, wenn du deinen ganzen endgültigen Code mal postest.. weil wie du schon erkannt hast, fehlt in der einfachst Klasse die Main-Methode.

    Bzw. was mir mal aufgefallen ist.. du verwendest in deiner Konsole ja den gcj, aber das ist ja was anderes als das "eigentliche" Java von SUN. Aber kann auch sein, dass ich mich irre





  • hallo

    bleib ruhig beim gcj.

    so gehts:

    deine datei abspeichern.. logisch, mit dateinamen als classennamen (achtung: groß und kleinschreibung beachten)

    Expr.java

    public class Expr{
        public static int foo(int a, int b, int c, int d){
            return a * b + c / d - 1;
        }
    
        public static void main(String []args) {
    
        	System.out.println(foo(10,20,30,40));
    	}
    }
    

    folgende zwei aufrufe brauchst du für gcj:

    erst zur objektdatei machen

    gcj -c -g -O Expr.java
    

    und dann linken

    gcj --main=Expr -o Expr Expr.o
    

    heraus kommt ein ausführbares binary.

    am besten das nächste mal man gcj 😉

    gruß


  • Mod

    Ich sehe das anders als elise. Schmeiß den gcj so schnell wie möglich weg und hol Dir das Original. Der gcj ist nicht komplett kompatibel zu Java und ich glaube, dass man als Anfänger schon genug damit zu tun hat, Java zu lernen. Da muss man sich nicht auch noch mit Inkompatibilitäten rumärgern.

    Abgesehen davon: Wenn man Dir Code ohne eine main-Methode zum Kompilieren vorgibt, dann ist es relativ unwahrscheinlich, dass das Ziel der Übung ein "ausführbares Binary" ist. Du sollst vermutlich eher eine ".class" erzeugen.



  • Ja danke für die Hilfe, ich hab mir jetzt auch das original Heruntergeladen, das hatte aber im Paketmanager so einen komischen namen und auch Beschreibung, dass es mir bei der Paketsuche nicht erschienen ist. Egal, ich habs jetzt. Und ja, ich soll eine .class erstellen, und die dann auch noch diassemblieren mit javap, daran die Syntax vom JVM Assembler verstehen, und durch dieses angewannte Wissen ein JVM Assembler code verstehen, den dann durch nachdenken wieder in Java schreiben (So dass bei einem erneutem diassemblieren exakt der gleiche code entsteht, alle ergebnisse Dokumentieren, mit Inhaltsangabe, und das alles hat Abgabetermin morgen Mittag 12:00 Uhr, wobei ich den ganzen Vormittag und noch bis später Nachmittag Schule habe. Und ich hab es geschafft, obwohl wir noch nichtmal nen HalloWelt Programm geschrieben haben. So is halt das Leben an der Uni, besonders als Juniorstudent, wenn man zu keiner Vorlesung kommen kann, aus Schultechnischen gründen.



  • Gregor schrieb:

    Ich sehe das anders als elise.

    ich sehe nichts. vor allem vergleiche ich nicht den gcj mit java.
    das eine hat mit dem anderen rein garnix zutun .. aber ok, wenn er java braucht, dann muss er java nehmen. 🙂
    und wenn jemand (nun nicht er) gcj möchte, dann macht er das. oder sie 😉

    so long



  • ich hab gcj nur genommen, weil da java kompiler dran stand, und das das einzige war, was ich in meinen Paketquellen als Javakompiler gefunden hatte, da dachte ich, dass es genauso austauschbar wäre, wie der gnu c/c++ kompiler, aber da hab ich wohl getäuscht, was aber nicht schlimm ist, denn ich hab ja jetzt javac.



  • hi Krux

    javac und gcj sind zwei vollständig unterschiedliche ansätze und programme.
    einfach nicht vergleichen.. sondern nebeneinander stehen lassen 😉

    viel spaß beim java lernen 🙂


Log in to reply