c + automake anfängerfrage
-
Hallo,
ich versuche zum ersten mal via automake die glib zu nutzen, leider wird diese nicht gefunden. Diese ist jedoch installiert.
der Aufruf von Make produziert:
gcc -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -g -O2 -lglib-2.0 -o testsocket clients.o client.odies bricht mit diesem Fehler ab:
clients.o: In function `testClientsNew': /home/dev/proj/c/socket/src/clients.c:46: undefined reference to `g_assertion_message_expr' /home/dev/proj/c/socket/src/clients.c:47: undefined reference to `g_assertion_message_expr' clients.o: In function `main': /home/dev/proj/c/socket/src/clients.c:51: undefined reference to `g_test_init' /home/dev/proj/c/socket/src/clients.c:52: undefined reference to `g_test_add_func' /home/dev/proj/c/socket/src/clients.c:54: undefined reference to `g_test_run' collect2: error: ld returned 1 exit statusdies jedoch geht ohne probleme
cc clients.c client.c client.h `pkg-config --cflags --libs glib-2.0` -o helloich verstehe nicht, warum es mit automake nicht läuft. hoffe mich kann jemand aufklären

-
Die Reihenfolge hat eine Bedeutung. Gelinkt wird von links nach rechts. Das hat nichts mit automake zu tun, sondern ist eine Eigenschaft des GNU-Linkers. Das ist auch keine böse Absicht, irgendeine Reihenfolge muss es schließlich geben und bei diesem Linker wird die Reihenfolge eben wie beschrieben gehandhabt.
-
Dieser Thread wurde von Moderator/in SeppJ aus dem Forum C (C89, C99 und C11) in das Forum Compiler- und IDE-Forum verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Danke für die schnelle Antwort!
sollte nicht aber die Reihenfolge stimmen wenn ich diese nicht explizit mit angebe?
meine Makefile.am sieht wie folgt aus:
# what flags you want to pass to the C compiler & linker AM_CFLAGS = $(DEPS_CFLAGS) AM_LDFLAGS = $(DEPS_LIBS) # this lists the binaries to produce, the (non-PHONY, binary) targets in # the previous manual Makefile bin_PROGRAMS = testsocket testsocket_SOURCES = clients.c client.c client.h
-
Muss es denn wirklich eine Reihenfolge geben?
Ich hätte mir das jetzt so vorgestellt, dass der Linker erstmal einen Pool von Symboldefinitionen aufbauen kann und anschließend ans Werk geht, könnte sogar noch die Reihenfolgen abspeichern und die Symbole bei Mehrfachauftreten (soll es ja aber eigentlich nicht geben dürfen -> ODR) entsprechend der Reihenfolge vor der Referenzierenden Definition zuordnen.
-
SeppJ schrieb:
Das hat nichts mit automake zu tun, sondern ist eine Eigenschaft des GNU-Linkers
bei diesem Linker wird die Reihenfolge eben wie beschrieben gehandhabt.
Arbeiten nicht alle Unix-Linker auf diese Weise? Ich weiß, das widerspricht nicht deiner Aussage, ich wundere mich nur, weshalb du den GNU ld hier so hervorhebst.
-
Weil ich mir nicht sicher war, ob das wirklich für alle gilt. Daher habe ich die eingeschränktere Aussage gemacht, weil ich genau weiß, wie viele Klugscheißer auf solch eine Aussage anspringen würden
.