Unter Linux: make(file) geht ned | gcc -lm *.c geht shcon



  • Hallo leute ich hab da ein Program mit mehreren *.c Files und *.h files,
    und programmier das Unterweindows in Cygwin.
    Außerdem verwende ich dafür das makefile hier ausm Forum: (LINK)
    klappt soweit auch wunderbar, nur wenn ichs bei nem Freund unter
    Linux verwenden will gehts ned.
    Fehler:

    ....
    calc_field.c:(.text+0xb6): undefined reference to `ceil'
    calc_field.c:(.text+0xd1): undefined reference to `floor'
    calc_field.c:(.text+0x266): undefined reference to `tan'
    calc_field.c:(.text+0x277): undefined reference to `cos'
    calc_field.c:(.text+0x2a1): undefined reference to `sin'
    calc_field.c:(.text+0x2b5): undefined reference to `cos'
    ....
    collect2: ld returned 1 exit status
    make: *** [program] Fehler 1
    

    sieht so aus als würde da eine mathe lib fehelen.
    aber unter Windows verwende ich neben den Proggramm eigenen
    auch nur 'stdio.h' und 'stdlib.h'.

    er hat mir dann gezeigt das es mit 'gcc -lm *.c' geht.
    Programm läuft dann auch korrekt.
    Wo ist da das Problem mit dem makefile?

    Aja gibts irgendwelche profiling / debugg hilfen ohne IDE,
    die also direkt in der cygwin-shell laufen bzw der bash ?
    Für die man am besten nicht erst seitenlange Mans lesen muss?



  • gcc braucht -lm, um Funktionen aus <math.h> zu verwenden.

    das muß mit dem Makefile gar nichts zu tun haben.



  • naja in cygwin klappts ohne ...

    hier der Link: [url]http://www.c-plusplus.net/forum/viewtopic-var-t-is-88418.html
    [/url]

    TARGET   := ./Prog
    CXXFLAGS := -Wall -Wno-long-long -Wextra -pedantic-errors -pedantic -std=c99
    CXX      := gcc
    LIBS     :=
    EXT      := c
    BUILDDIR := build
    
    override BUILDDIR := $(strip $(BUILDDIR))
    SOURCES  := $(wildcard *.$(EXT))
    OBJECTS  := $(patsubst %.$(EXT), $(BUILDDIR)/%.o, $(SOURCES))
    DEPS     := $(patsubst %.$(EXT), $(BUILDDIR)/%.dep, $(SOURCES))
    
    .PHONY: all
    all: $(TARGET)
    
    $(TARGET): $(OBJECTS) $(DEPS)
    	$(CXX) $(CXXFLAGS) -o $(TARGET) $(OBJECTS) $(LIBS)
    
    ifneq ($(MAKECMDGOALS), clean)
    -include $(DEPS)
    endif
    
    $(OBJECTS): $(BUILDDIR)/%.o: %.$(EXT) $(BUILDDIR)/%.dep $(BUILDDIR)/.tag
    	$(CXX) $(CXXFLAGS) -c $< -o $@
    
    $(DEPS): $(BUILDDIR)/%.dep: %.$(EXT) $(BUILDDIR)/.tag
    	$(CXX) $(CXXFLAGS) -MM $< -MT $@ -MT $(<:.$(EXT)=.o) -o $@
    
    %.tag:
    	mkdir -p $(dir $(@))
    	touch $@
    
    .PHONY: clean
    clean:
    	rm -rf $(BUILDDIR)
    

    dh. bei libs gehört noch was hin nehm ich an ...
    fragt sich nur trotzdem wiesos in cygwin klappt.



  • Wahrscheinlich, weil der es per default linkt. Pack bei Libs -lm rein und es sollte gehen.



  • Dieser Thread wurde von Moderator/in rüdiger aus dem Forum Rund um die Programmierung 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.


Anmelden zum Antworten