Linker error



  • Hallo,

    Bei folgendem Programm tritt der Fehler:

    [Linker error] undefined reference to einlesen(float&, float&)' [Linker error] undefined reference tosumme(float)'
    ld returned 1 exit status

    auf. Ich hab den ganzen Code vorher in eine Datei gehabt. Das hat ohne Probleme funktioniert. Hab ihn nun auf die drei Quellcodedateien (siehe unten) aufgeteilt. Ich hab die Frage schon in einer anderen Rubrik gestellt. Die haben mir gesagt ich solls mal hier versuchen, weil der Fehler auf das Linken zurückzuführen ist. Ich will einfach nur wissen ob ich direkt die main Methode compilieren muss oder ob vorher die Dateien auf die von der main Methode aus zugeriffen wird unabhängig davon compiliert werden müssen. Ich hoffe ihr wisst was ich meine. Ich stehe nänmlich total auf dem Schlauch.

    vorab schonmal danke.

    #include <iostream> 
    using namespace std; 
    
    extern void einlesen (float&, float&); 
    extern float summe   (float); 
    
    float a; 
    
    int main () 
    { 
       float b; 
       float summ; 
    
       einlesen (a, b); 
    
       summ = summe  (b); 
       cout << "die Summe a + b ist " << summ << endl; 
    
       return 0; 
    } 
    
    #include <stdio.h> 
    
    float summe (float y) 
    { 
       extern float a; 
       return a + y; 
    } 
    
    #include <iostream> 
    using namespace std; 
    
    void einlesen (float& x, float& y) 
    { 
       cout << endl << "Gib einen float-Wert fuer a ein: "; 
       cin >> x; 
       cout << endl << "Gib einen float-Wert fuer b ein: "; 
       cin >> y; 
    }
    


  • Der eigenliche weg zu einer ausfürbahren datei zu kommen ist:
    1. alle sorcedateien einzeln zu kompilieren
    2. die aus dem ersten schritt entstandenen object-dateien zu einer ausführbahren datei zu linken.
    allerdings gibts bei fast allen compilern besondere switches und aufrufparameter um diese beiden schritte mit einem einzigen kommando aufzurufen. das ist aber von compiler zu compiler verschieden



  • wie kompilierst/linkst du denn?

    mit gcc z.b. so:
    g++ -c *.cpp
    g++ -o foo *.o

    (natürlich nur, wenn in dem verzeichnis keine anderen sourcen liegen)

    auf bald
    oenone



  • Hallo,

    danke für die Hilfe. Hat jetzt endlich funktioniert. Hab’s vorher noch gar nicht über die Shell probiert. In diesem Zusammenhang hät ich dann noch ne Frage zu meiner Entwicklungsumgebung. Ich nutzte zurzeit Eclipse in Verbindung mit diesem Plugin. Was haltet ihr davon. Ist das genauso empfehlenswert wie für Java?. Des weiteren hab ich da noch ne Entwicklungsumgebung von Bloodshet (Dev-C++). Bin mir auch nicht so sicher was ich davon halten soll. Wäre super wenn ihr mir eine Tip geben könntet welche Entwicklungsumgebung ich am besten benutzte.


Log in to reply