To jest trochę zawstydzające. Wiem, co się dzieje, ale nie dlaczego. Otrzymuję błąd "niezdefiniowane odniesienie do", co oznacza, że linker (ld) nie umieszcza kodu z biblioteki, którą utworzyłem.Problemy z ld i biblioteką statyczną "niezdefiniowane odniesienie do"
Obecnie omawiam kurs Zed A. Shaw "Learn C the Hard Way". Próbuję ukończyć ćwiczenie 32, ale ciągle pojawia się ten sam błąd.
W książce można rozwijać plik make, który uruchamia następujące polecenie:
cc -g -O2 -Wall -Wextra -Isrc -rdynamic -DNDEBUG build/liblcthw.a \
tests/list_tests.c -o tests/list_tests
gdzie -g jest umożliwienie informacji diagnostycznych, -Wall jest umożliwienie „ALL” ostrzeżenia, -Wextra jest umożliwienie więcej warnings, -Isrc, aby dołączyć katalog src do katalogu biblioteki, -o tests/list_tests ma wytworzyć wynik o tej nazwie w tym katalogu, -DNDEBUG, aby włączyć zmienną z kodu, -O2 dla optymalizacji poziomu 2 (cokolwiek to znaczy) i kompilacji/liblcthw.a, aby dołączyć tę bibliotekę (tę, która się buduje). Reszta nie mam pojęcia, co robią.
Jeśli mam to dobrze, istnieje lista.c w katalogu src, który tworzy listę obiektów.o. Ten obiekt jest później zawarty w lib via ar i ranlib. Wywołanie nagłówka list.h powinno sprawić, że ld zajmie się kompilacją/liblcthw.a dla list.o. Chodzi o to, że ld nie czyta build/liblcthw.a z jakiegoś powodu. Dostaję to niezdefiniowane odniesienie do błędu.
Próbowałem skontaktować się z Zedem, ale najwyraźniej jest zapracowanym człowiekiem. Mam nadzieję, że otrzymam pomoc. Powiedz, czy muszę dodać więcej informacji o problemie. Here's do tej pory link do całej biblioteki.
Mam nadzieję, że ktoś może mi pomóc.
Zamówienie spraw. Biblioteki statyczne przechodzą * po * plikach źródłowych/obiektowych w linii poleceń. –
Nie otrzymałem Twojej rekomendacji –
Zmienianie kolejności argumentów wiersza polecenia. Plik .c musi iść pierwszy, a plik .a musi iść po tym. –