2017-02-02 6 views
0

Я включил math.h в 1.c и LDLIBS=-lm в makefile.Неопределенная ссылка на sqrt

1.c и 2.c - некоторые из файлов в текущем каталоге.

Make-файл выглядит следующим образом:

dINES+=PROJECT_CONF_H=\"project-conf.h\" 
CONTIKI_PROJECT = 1 2 
all: $(CONTIKI_PROJECT) 

CONTIKI = ../.. 

WITH_UIP6=1 
UIP_CONF_IPV6=1 

CFLAGS+= -DUIP_CONF_IPV6_RPL -DUIP_CONF_IPV6 -DWITH_UIP6 
LDLIBS=-lm 
ifdef PERIOD 
CFLAGS=-DPERIOD=$(PERIOD) 
endif  

include $(CONTIKI)/Makefile.include 

Я прочитал связанный с этим вопрос StackOverflow и ответы, но не в состоянии понять, почему Undefined reference to sqrt.

+2

Попробуйте сухой запуск 'make -n'. Он должен сразу сказать вам, если выполняемые команды не соответствуют ожидаемым – StoryTeller

+0

Когда такие вещи происходят, даже если вы включили math.h, скорее всего, вы не свяжете библиотеку с плавающей запятой с проектом. Общая проблема со встроенными системами. Обычно при создании проекта есть какой-то вариант, или, в противном случае, есть опция компилятора/компоновщика. – Lundin

ответ

1

Во-первых, обратите внимание, что include $(CONTIKI)/Makefile.include может отключить любые настройки, которые вы сделали выше. Поэтому мы не можем отладить вашу проблему.

Затем запустите make -p один раз, чтобы понять встроенные правила (при условии, что вы используете GNU make). Обязательно прочтите documentation of make. Запустите также make --trace и/или используйте remake (например, remake -x) для отладки вашего Makefile.

Помните, что порядок аргументов программы gcc имеет значение. Прочтите сначала главу Invoking GCC документации gcc. Вы хотите скомпилировать с -Wall -g (чтобы получить все предупреждения & отладочную информацию), которые могут быть добавлены к вашей линии CFLAGS+=. Может быть, ваша
CFLAGS=-DPERIOD=$(PERIOD) линия должна быть CFLAGS+= -DPERIOD=$(PERIOD)

Возможно, ваша LDLIBS=-lm линия должна быть LIBES= -lm.

Сообщение Undefined reference: sqrt может быть связано с тем, что ваша команда компиляции (работает make) имеет -lm отсутствует или в неправильном порядке.

+0

Вы были правы. Я добавил '-lm' в Makefile.include. Я получил некоторые другие ошибки, но избавился от этого. Благодаря! –

+0

Я не думаю, что вы должны испортить свой '$ (CONTIKI)/Makefile.include' –

+0

. Какая должна быть работа в таких случаях? –

Смежные вопросы