Wie um zu verhindern, "Fehler:" symbol "schwarzarbeit hier" trotz EXPORT_SYMBOL in ein Linux-kernel-Modul?
Ich bin Einbettung einige Treiber in ein Linux-kernel, wenn ich diesen Fehler (ich bin hinzufügen, das Gerät in der board-Datei und Registrierung):
error: 'kxtf9_get_slave_descr' undeclared here (not in a function)
Ich befindet sich die obige Funktion in einer Treiber-Datei
struct ext_slave_descr *kxtf9_get_slave_descr(void)
{
return &kxtf9_descr;
}
EXPORT_SYMBOL(kxtf9_get_slave_descr);
Sollte es nicht gemacht "sichtbar" EXPORT_SYMBOL?
Die C-Datei mit dem code oben hat keine header-Datei (ich habe es nicht geschrieben, ich fand es einfach hier und ich bin Umsetzung. Sie sagen, es ist getestet, so dass ich davon ausgehen, dass ein header nicht benötigt wird?
Den rest des Codes kompiliert perfekt (so "sieht" den code in dem Ordner), und die Datei mit dem obigen code kompiliert, wie gut!
Minimal-Beispiel: stackoverflow.com/questions/12311867/...
InformationsquelleAutor stef | 2011-07-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
EXPORT_SYMBOL
exportiert das symbol für dynamic linking. Was Sie haben, ist nicht eine Verknüpfung Fehler, sondern eine Zusammenstellung Fehler wegen einer fehlenden Funktion Erklärung. Sie haben entweder schreiben Sie eine header-Datei der C-Datei und schließen Sie die header-Datei, oder Sie erklären die Funktion der C-Datei, die Sie kompilieren.Option 1:
kxtf9.h:
your_file.c:
Option 2:
your_file.c:
Beachten Sie auch, dass die
EXPORT_SYMBOL
in der Datei kxtf9.c hat#ifdef __KERNEL__
um ihn herum, so dass Sie haben, richten Sie Ihre build-Umgebung (Makefile) richtig - sonst bekommst du einen link-Fehler.InformationsquelleAutor Antti