PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Autotools: Linken geht nicht



claus_s
19-05-2006, 13:19
Hallo!

Ich habe mich gestern an die Autotools gewagt. Ich bin ja eigentlich kein Programmierer; es ist mehr ein Hobby. Verzeiht also, wenn ich gleich etwas furchtbar offensichtliches frage.

Der Anlass war: Ich habe ein Paket gefunden, daß nur ein Makefile benutzt.
Das sah nach einer guten Einstiegsübung aus. Wesentlicher Punkt im Makefile:



CC=gcc
CFLAGS=-Wall `pkg-config --cflags gtk+-2.0`
LIBS=`pkg-config --libs gtk+-2.0`
bindir ?= /usr/bin
mandir ?= /usr/share/man

.c.o:
$(CC) -c $(CFLAGS) $(CPPFLAGS) $<

g3data: main.o sort.o points.o drawing.o
$(CC) $(CFLAGS) -o g3data main.o sort.o points.o drawing.o $(LIBS)
strip g3data

main.o: main.c main.h strings.h

sort.o: sort.c main.h

points.o: points.c main.h

drawing.o: drawing.c main.h


Nun habe ich das in folgendes Makefile.am übersetzt:



INCLUDES = @GTK_CFLAGS@
LDADD = @GTK_LIBS@
CLEANFILES = *~
DISTCLEANFILES = .deps/*.P

bin_PROGRAMS = g3data

g3data_SOURCES = sort.c \
points.c \
drawing.c

EXTRA_DIST = main.h \
strings.h


Die Objektdateien werden auch erzeugt, nur leider linkt "make" am Ende nicht -- die Fehlermeldung beginnt mit:



gcc -g -O2 -o g3data sort.o points.o drawing.o -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lm -lpangocairo-1.0 -lfontconfig -lXinerama -lXi -lXrandr -lXext -lXcursor -lXfixes -lpango-1.0 -lcairo -lXrender -lX11 -lgobject-2.0 -lgmodule-2.0 -ldl -lglib-2.0
/usr/lib/gcc/i486-linux-gnu/4.0.2/../../../../lib/crt1.o: In function `_start':
../sysdeps/i386/elf/start.S:115: undefined reference to `main'
points.o: In function `CalcPointValue':
~/Desktop/work_dir/g3data-1.5.0/src/points.c:82: undefined reference to `axiscoords'


Da kommen noch einige andere Variable, die ihm Probleme bereiten. Aber alle sind in points.c definiert:



/* Extern variables */

extern gint axiscoords[MAXNUMTABS][4][2];
extern gdouble realcoords[MAXNUMTABS][4];
extern gboolean logxy[MAXNUMTABS][2];


Wie man sieht: Alles Typen aus GTK+ Bibliothek, und GTK+ ist im Aufruf für den Linker enthalten.

Was habe ich übersehen?

Romanday
27-05-2006, 20:18
Die Objektdateien werden auch erzeugt, nur leider linkt "make" am Ende nicht -- die Fehlermeldung beginnt mit:

[code]
gcc -g -O2 -o g3data sort.o points.o drawing.o -lgtk-x11-2.0 -lgdk-x11-2.0 -latk-1.0 -lgdk_pixbuf-2.0 -lm -lpangocairo-1.0 -lfontconfig -lXinerama -lXi -lXrandr -lXext -lXcursor -lXfixes -lpango-1.0 -lcairo -lXrender -lX11 -lgobject-2.0 -lgmodule-2.0 -ldl -lglib-2.0
/usr/lib/gcc/i486-linux-gnu/4.0.2/../../../../lib/crt1.o: In function `_start':
../sysdeps/i386/elf/start.S:115: undefined reference to `main'
points.o: In function `CalcPointValue':
~/Desktop/work_dir/g3data-1.5.0/src/points.c:82: undefined reference to `axiscoords'


Da kommen noch einige andere Variable, die ihm Probleme bereiten. Aber alle sind in points.c definiert:

[code]

Was habe ich übersehen?

Das ist eine Frage fürs C Forum.
Schau dir mal die Fehlermeldung an.
In main fehlt im was und axiscoords ist nicht definiert.
Vielleicht ein Versions Problem!?

peschmae
27-05-2006, 21:57
Ich denke du müsstest wohl main.c auch noch erwähnen in automake-File.

Zum anderen weiss ich auch nicht so genau. Guck mal in was genau sich der Aufruf unterscheidet von dem was das Makefile macht und ob das geht wenn du das selber kauf der Kommandozeile so ausführst.

MfG Peschmä

claus_s
30-05-2006, 19:40
Ich denke du müsstest wohl main.c auch noch erwähnen in automake-File.

Ich Idiot !!!

Kein Wunder, daß er die Definition der Variablen nicht gefunden hat. Das war's. Läuft wie am Schnürchen.

Danke, danke, danke!