Проблема здесь в том, что вы связываете с математической библиотекой (опция -lm
). Библиотеки должны быть после источников или объектных файлов в командной строке при создании.
Так что, если вы запускали команду строить вручную, она должна выглядеть
gcc p1.c -o p1 -lm
Проблема заключается в том, что ваш Makefile не делает ничего, и он живет на неявных только правил. Неявные правила используют определенные переменные в определенном порядке, которые не помещают библиотеку в нужную позицию в вашем файле makefile.
Попробуйте вместо этого что-то вроде этого Makefile:
# 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)
Если вы запустите make
с использованием вышеуказанного Makefile, программа make
должен сначала построить объектный файл p1.o
из исходного файла p1.c
. Затем следует использовать объектный файл p1.o
, чтобы связать исполняемый файл p1
вместе со стандартной математической библиотекой.
И makefile будет создавать исполняемый файл 'p1' из каких объектных файлов? И, пожалуйста, опубликуйте вывод из команды 'make' (после' make clean'). –
Вы используете функцию pow в своем коде? – Angen
Да, я использовал pow в своем коде. –