Das Problem ist hier die Reihenfolge, die Sie mit der Mathematikbibliothek verknüpfen (-lm
Option). Bibliotheken sollten beim Erstellen nach den Quellen oder Objektdateien in der Befehlszeile sein.
Also, wenn Sie den Befehl lief manuell zu bauen, sollte es aussehen
gcc p1.c -o p1 -lm
Das Problem ist, dass Ihr Make-Datei nicht wirklich etwas zu tun hat, und es lebt auf implizite Regeln allein. Die impliziten Regeln verwenden bestimmte Variablen in einer bestimmten Reihenfolge, die die Bibliothek nicht in der richtigen Position in Ihrem Makefile platzieren.
Versuchen Sie stattdessen so etwas wie diese Make-Datei:
# The C compiler to use.
CC = gcc
# The C compiler flags to use.
# The -g flag is for adding debug information.
# The -Wall flag is to enable more warnings from the compiler
CFLAGS = -g -Wall
# The linker flags to use, none is okay.
LDFLAGS =
# The libraries to link with.
LDLIBS = -lm
# Define the name of the executable you want to build.
EXEC = p1
# List the object files needed to create the executable above.
OBJECTS = p1.o
# Since this is the first rule, it's also the default rule to make
# when no target is specified. It depends only on the executable
# being built.
all: $(EXEC)
# This rule tells make that the executable being built depends on
# certain object files. This will link using $(LDFLAGS) and $(LDLIBS).
$(EXEC): $(OBJECTS)
# No rule needed for the object files. The implicit rules used
# make together with the variable defined above will make sure
# they are built with the expected flags.
# Target to clean up. Removes the executable and object files.
# This target is not really necessary but is common, and can be
# useful if special handling is needed or there are many targets
# to clean up.
clean:
-rm -f *.o $(EXEC)
Wenn Sie make
unter Verwendung der oben Make-Datei ausführen, sollte das make
Programm zuerst p1.o
aus der Quelldatei p1.c
die Objektdatei erstellen. Dann sollte die p1.o
Objektdatei verwenden, um die ausführbare Datei p1
zusammen mit der Standard-Math-Bibliothek zu verknüpfen.
Und das Makefile wird die ausführbare 'p1' von welchen Objektdateien erstellen? Und posten Sie bitte die Ausgabe, indem Sie den 'make' Befehl ausführen (nach' make clean'). –
Verwenden Sie die Pow-Funktion in Ihrem Code? – Angen
Ja, ich habe pow in meinem Code verwendet. –