Ich schreibe eine ziemlich große C ++ - Bibliothek für gemeinsam genutzte Objekte und bin auf ein kleines Problem gestoßen, das das Debuggen zu einem Problem macht:
Wenn ich eine Funktion / Methode in einer Header-Datei definiere und vergesse, einen Stub dafür zu erstellen (während der Entwicklung), werden beim Kompilieren keine Fehler angezeigt, da ich als gemeinsam genutzte Objektbibliothek und nicht als ausführbare Datei baue vergessen, diese Funktion zu implementieren. Der einzige Weg, um herauszufinden, dass etwas nicht stimmt, ist zur Laufzeit, wenn eine Anwendung, die mit dieser Bibliothek verknüpft ist, schließlich mit einem Fehler "undefiniertes Symbol" umkippt.
Ich suche nach einer einfachen Möglichkeit, um zu überprüfen, ob ich alle Symbole habe, die ich zum Zeitpunkt der Kompilierung benötige, vielleicht etwas, das ich meinem Makefile hinzufügen kann.
Eine Lösung, die ich mir nm -C -U
ausgedacht habe, besteht darin, die kompilierte Bibliothek zu durchlaufen , um eine entwirrte Liste aller undefinierten Referenzen zu erhalten. Das Problem ist, dass auch die Liste aller Referenzen in anderen Bibliotheken wie GLibC angezeigt wird, mit denen natürlich zusammen mit dieser Bibliothek verknüpft wird, wenn die endgültige Anwendung zusammengestellt wird. Es wäre möglich, die Ausgabe von nm
to grep
durch alle meine Header-Dateien zu verwenden und zu prüfen, ob einer der Namen übereinstimmt. Dies scheint jedoch verrückt zu sein. Sicher ist dies kein ungewöhnliches Problem und es gibt einen besseren Weg, es zu lösen?
nm -C -u
hat mich mehrfach gerettet! (Beachten Sie die Kleinbuchstaben-u
auf meinem System.) Lassen Sie diesen Kommentar hier, damit ich ihn beim nächsten Mal finden kann, wenn ich ihn brauche.