Dieser ist ein wenig peinlich. Ich weiß, was los ist, aber nicht warum. Ich bekomme einen "undefinierten Verweis auf" -Fehler, was bedeutet, dass der Linker (ld) den Code nicht aus der Bibliothek, die ich erstellt habe, setzt.Probleme mit ld und statische Bibliothek "undefinierter Verweis auf"
Ich mache derzeit mit Zed A. Shaw "Learn C the Hard Way" natürlich herumalbern. Ich versuche Übung 32 zu beenden, aber ich bekomme immer den gleichen Fehler.
Im Buch, das Sie eine Make-Datei zu entwickeln, die den folgenden Befehl ausführt:
cc -g -O2 -Wall -Wextra -Isrc -rdynamic -DNDEBUG build/liblcthw.a \
tests/list_tests.c -o tests/list_tests
wo -g ist Debug-Informationen zu ermöglichen, -Wall ist „alle“ Warnungen zu ermöglichen, ist -Wextra mehr zu ermöglichen, Warnungen, -Isrc, um das src-Verzeichnis in das Bibliotheksverzeichnis aufzunehmen, -o tests/list_tests erzeugt eine Ausgabe mit diesem Namen in diesem Verzeichnis, -DNDEBUG, um eine Variable aus dem Code zu aktivieren, -O2 für die Optimierung der Ebene 2 (was auch immer das bedeutet)) und build/liblcthw.a, um diese Bibliothek (diejenige, die gerade gebaut wird) aufzunehmen. Den Rest habe ich keine Ahnung was sie machen.
Wenn ich es richtig verstanden habe, gibt es eine list.c im Verzeichnis src, die eine Objektliste erstellt. Dieses Objekt wird später in die lib via ar und ralib eingebunden. Also sollte der Aufruf des Headers list.h ld veranlassen, in build/liblcthw.a nach list.o zu suchen. Die Sache ist, ld liest Build/liblcthw.a aus irgendeinem Grund nicht. Also bekomme ich diesen undefinierten Verweis auf Fehler.
Ich habe versucht, Zed zu kontaktieren, aber er ist anscheinend ein beschäftigter Mann. Also hoffe ich hier Hilfe zu bekommen. Sagen Sie mir, ob ich weitere Informationen zu dem Problem hinzufügen muss. Here's ein Link zu der ganzen Bibliothek bisher.
Ich hoffe, dass mir jemand helfen kann.
Bestellung Angelegenheiten. Statische Bibliotheken gehen * nach * Quell-/Objektdateien in der Befehlszeile. –
Ich habe Ihre Empfehlung nicht erhalten –
Ändern Sie die Reihenfolge der Befehlszeilenargumente. Die .c-Datei muss zuerst gehen und die .a-Datei muss danach gehen. –