undefined reference to `Tcl_Init'



  • Hi, kriege folgenden Fehler bei der Projekterstellung, weiss nur nicht wo ich nachdem Fehler suchen soll. Kann mir vielleicht jmd nen Tipp geben bitte.

    int Tcl_AppInit(Tcl_Interp *interp)
    {
    //  std::cout<<"Tcl_AppInit\n"<<std::endl;
    
        if (Tcl_Init(interp) == TCL_ERROR) {
    
    //	std::cout<<"Tcl_Init\n"<<std::endl;
    
    	//Tcl_GlobalEval (interp, test);
    	return TCL_ERROR;
        }
    
        if (Tk_Init(interp) == TCL_ERROR) {
    
    //	std::cout<<"Tk_Init\n"<<std::endl;
    
    	return TCL_ERROR;
        }
    

    Fehler :

    undefined reference to `Tcl_Init'
    undefined reference to `Tk_Init'
    


  • Da scheinen irgendwelche libs zu fehlen in denen diese Funktionen definiert sind. Evtl. sowas wie tk.lib oder so. 🙂



  • ist es irgendeine Standersbibliothek für diese Funktion, weil die tk.h habe ich eingebunden.



  • tk.h ist doch nur die Headerdatei mit den Deklarationen. Du mußt doch noch die Bibliotheksdatei mit den Definitionen in dein Projekt einbinden. Die wird dann wahrscheinlich tk.lib oder tk.a heißen.



  • Das verstehe ich jetzt nicht, die tk.h ist eine Headerdatei die schon vorhanden ist die habe ich nicht geschrieben. Und dann musst man trotzdem die Bibliothek einbinden?

    PS: wo finde ich diese Bibliothek?
    Habe Linux als Betriebssystem



  • Das ist doch das gleiche Problem wie in diesem Thread.

    Wie ich dort bereits geschrieben hab, die Datei libtcl.so (oder so ähnlich, jenachdem, wie Du es kompilert bzw. installiert hast) muss installiert sein und die Bibliothek muss dem Linker mitgegeben werden.

    Führe also mal folgendes aus:

    /sbin/ldconfig -p | grep -i tcl
    

    Dort sollte dann eine libtcl.so oder eine ähnliche Datei auftauchen. Falls nicht, führe mal (als Root) aus:

    ldconfig
    

    .

    Nun wiederholst Du den obigen Befehl, ist die Bibliothek nach wie vor nicht aufgelistet, so ist sie definitiv nicht installiert. Lösung wäre hier, diese zu installieren. Wenn Du das ganze allerdings über den Paketmanager Deines Systems installiert haben solltest und schon die Headerdateien hast, sollte auch die Bibliothek selbst dabei sein - aber überprüf das wie hier beschrieben nochmal.

    Und dem Linker musst Du dann noch die Option -l tcl mitgeben, damit die Bibliothek auch verwendet wird. Je nachdem, welche Entwicklungsumgebung (IDE, Kommandozeile + texteditor, etc.) Du verwendest, kannst Du diese Option angeben.



  • Danke für eure Hilfe, hab gerade das Problem gefunden :).

    Musste die Bibliothek -ltcl8.4 dem Linker mitteilen.
    Da ich unter Kdevelop arbeite war es schwierig rausszufinden wo man das einträgt.


Anmelden zum Antworten