Welche Bibliotheken muss ich einbinden?



  • Ich moechte gerne eine C-Datei kompilieren, die ich aus dem Netz geladen habe. Das Programm ist sehr kurz und besteht aus nur zwei Dateien

    flow1.c
    rand.c

    flow1.c verwendet folgende Header

    #include <stdlib.h>
    #include <math.h>
    #include <stdio.h>
    #include <X11/Xlib.h>
    #include <X11/Intrinsic.h>
    #include <X11/StringDefs.h>     /* Get standard string definitions. */
    #include <X11/xpm.h> /* xpm after Intrinsic to avoid redefinition of Pixel */
    
    #include <X11/Xaw/Box.h>
    #include <X11/Xaw/Cardinals.h>
    #include <X11/Xaw/AsciiText.h>
    

    Ich habe mir ein Makefile gebaut, das so aussieht:

    1 CXX=gcc
      2 CFLAGS=-m64
      3 LDFLAGS=-m64 -lXpm -lm
      4 
      5 TARGET = flow1
      6 OBJS =  flow1.o\
      7         rand.o
      8 
      9 all: $(TARGET)
     10 
     11 $(TARGET): $(OBJS)
     12         $(CXX) $(LDFLAGS) -o $(OBJS)
     13 
     14 %.o: %.c
     15         $(CXX) $(CFLAGS) -o $@ -c $^
     16 
     17 clean:
     18         rm -f $(OBJS) $(TARGET)
    

    Wenn ich den Code kompiliere erhalte ich folgende Fehlermeldung

    make
    gcc -m64 -o flow1.o -c flow1.c
    gcc -m64 -lXpm -lm -o flow1.o rand.o
    /usr/lib64/gcc/x86_64-suse-linux/4.5/../../../../lib64/crt1.o: In function \_start': /usr/src/packages/BUILD/glibc-2.11.2/csu/../sysdeps/x86_64/elf/start.S:109: undefined reference tomain'
    collect2: ld returned 1 exit status
    make: *** [flow1] Error 1

    Welche Bibliothek fehlt denn noch?



  • undefined reference to `main'

    Fehlr dir vielleicht eine Mainmethode in flow1.c?



  • Nein, eine main-Methode ist vorhanden.



  • gcc -m64 -lXpm -lm -o flow1.o rand.o
    

    aber du versuchst rand.o zu linken und in die ausgabedatei flow1.o zu schreiben, oder nicht?



  • Ich nehme an, dass der rand.o file keine Rolle spielt. Vielmehr glaube ich, dass fuer X11 noch eine Bibliothek fehlt, weiss aber leider nicht, welche.



  • Simon2011 schrieb:

    Ich nehme an, dass der rand.o file keine Rolle spielt. Vielmehr glaube ich, dass fuer X11 noch eine Bibliothek fehlt, weiss aber leider nicht, welche.

    Und du bist sicher, dass du deinen Compiler richtig bedient hast?



  • Ich muss main und mngbd da leider Recht geben. Irgendetwas stimmt mit deinem Makefile nicht, das solltest du nochmal überprüfen.

    %.o: %.c
            $(CXX) $(CFLAGS) -o $@ -c $^
    

    ist gmake-spezifisch, glaube ich, deswegen weiß ich leider nicht, was man daran ändern muss, damit es funktioniert. Die traditionelle Variante ist

    .c.o:
            $(CXX) -c $(CFLAGS) $< -o $@
    


  • versuch noch -lX11 einzubinden



  • Habe alle eure Vorschlaege eingearbeitet. Leider kommt der Fehler immernoch.



  • Simon2011 schrieb:

    13 
     14 %.o: %.c
     15         $(CXX) $(CFLAGS) -o $@ -c $^
    

    und versuch mal bitte folgendes

    14 %.o: %.c
     15         $(CXX) $(CFLAGS) -c $<  -o $@
    


  • aendert leider auch nichts an der Fehlermeldung. Vielen Dank aber fuer deine Bemuehungen..



  • Auf was für einer Kiste (Betriebssystem ) compilierst du



  • Simon2011 schrieb:

    1 CXX=gcc
      2 CFLAGS=-m64
      3 LDFLAGS=-m64 -lXpm -lm
      4 
      5 TARGET = flow1
      6 OBJS =  flow1.o\
      7         rand.o
      8 
      9 all: $(TARGET)
     10 
     11 $(TARGET): $(OBJS)
     12         $(CXX) $(LDFLAGS) -o $(OBJS)
     13 
     14 %.o: %.c
     15         $(CXX) $(CFLAGS) -o $@ -c $^
     16 
     17 clean:
     18         rm -f $(OBJS) $(TARGET)
    

    Ich sehe gerade das Zeile 11 und 12 Nicht richtig sind

    11 $(TARGET): $(OBJS)
     12         $(CXX) $(LDFLAGS) -o $(TARGET) $(OBJS)
    

    Ahja un füge unter der Zeile 16 mal folgendes noch mit ein

    flow.o: flow.c
    rand.o: rand.c
    

    und bitte mit $< versuchen nicht mit $^

    weiter hast du die multilib64 installiert?



  • Danke! Das hat es doch schonmal verbessert.
    vielen Dank...



  • Mich würde gerne nur mal intressieren was hat denn die Veränderung denn erzeugt


Anmelden zum Antworten