Anzeige:
Ergebnis 1 bis 4 von 4

Thema: Autotools: Linken geht nicht

  1. #1
    Registrierter Benutzer
    Registriert seit
    10.06.2003
    Beiträge
    15

    Autotools: Linken geht nicht

    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:

    Code:
    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:

    Code:
    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:

    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:
    /* 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?

  2. #2
    Registrierter Benutzer Avatar von Romanday
    Registriert seit
    03.02.2004
    Beiträge
    829
    Zitat Zitat von claus_s
    [code]

    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!?
    Abriss, bzw. die Sprengung des World Trade Centers
    WDR Dokumentation
    Doku + DT Untertitel
    Weitere Infos - Terrorstorm

  3. #3
    Registrierter Benutzer Avatar von peschmae
    Registriert seit
    14.03.2002
    Ort
    Schweizland
    Beiträge
    4.549
    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ä
    The greatest trick the Devil ever pulled was convincing the world he didn't exist. -- The Usual Suspects (1995)
    Hey, I feel their pain. It's irritating as hell when people act like they have rights. The great old one (2006)

  4. #4
    Registrierter Benutzer
    Registriert seit
    10.06.2003
    Beiträge
    15
    Zitat Zitat von peschmae
    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!

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •