Bibliotheken in C
minicrispie
- programmiertechnik
Hallo,
ich hab ein problem bezüglich dem einbinden einer eigenen bibliothek.
Mit Dev C++ habe ich eine statische Bibliothek erzeugt(mit für mich wichtigen funktionen)
nun hatte ich 2 Dateien:
konsole.h:
int ausgabe(char *txt);
konsole.a --> der code konsole.c
#include <stdio.h>
int ausgabe(char *str)
{
printf("Hallo Welt");
return 0;
}
Die konsole.h habe ich in das include-Verzeichnis von Dev gelegt. Die konsole.a befindet sich im lib-verzeichnis von Dev.
Wenn ich nun folgendes Programm versuche zu kompilieren:
#include <konsole.h>
int main()
{
ausgabe();
system("pause");
return 0;
}
... dann erscheint eine fehlermeldung:
[Linker error] undefined reference to 'ausgabe'
was hat das zu bedeuten? ... er kann die Bibliothek finden, aber angeblich nicht den Code. Wo muss ich das noch ändern, das so etwas problemlos funktioniert?
Ich habe sogar die Objektdatei mit in das lib-verzeichnis kopiert.
MfG. Christoph Ludwig
你好 Christoph,
[...]
... dann erscheint eine fehlermeldung:[Linker error] undefined reference to 'ausgabe'
was hat das zu bedeuten?
Du hast vermutlich dem Compiler nicht gesagt, dass er die Executable, also das "Programm", gegen konsole.a linken soll. Vereinfacht ausgedrückt wird beim Linken ein Verweis auf die Bibliothek in der Zieldatei gespeichert, wo drin steht: für die Implementation von der Funktion ausgabe() sieh bitte in konsole.a nach.
Wie speziell du das jetzt in Dev-CPP machst, kann ich dir leider nicht sagen.
再见,
克里斯蒂安
Hallo Lu... äh Christoph ;-)
das ist keine Fehlermeldung des Compilers sondern des Linkers. Der Compiler findet die Definition des Funktionskopfes in der header-Datei, das reicht ihm. Für jede Lib, die Du benutzen willst, musst Du aber den ausführbaren (d.h. bereits compilierten) Code zum Projekt zulinken. Bei allen Funktionen die aus eingebundenen Libs aufgerufen werden schaut der Linker nach den tatsächlichen Sprungadressen, und zu der von Dir geschriebenen findet er keine, weil sie eben nicht eingebunden wurde.
Normalerweise wird das im Makefile angegeben. Wie das nun genau bei Dev C++ ist weiss ich nicht.
Ciao, Stefanie