неопределенная ссылка на `pow 'в приложении contiki - PullRequest
0 голосов
/ 15 апреля 2019

enter image description here Можно ли работать с библиотекой math.h в симуляторе contiki-cooja? Я использую contiki 3.0 на Ubuntu 18.04 LTS

Я попытался добавить LDFLAGS + = -lm в make-файл приложения hello-world. Кроме того, я также попытался добавить -lm в файл Makefile.include. Вещи не работают. Как правильно добавить -lm.

привет-world.c

#include "contiki.h"

#include <stdio.h> /* For printf() /
#include <math.h>
#define DEBUG DEBUG_PRINT
static float i;
/---------------------------------------------------------------------------/
PROCESS(hello_world_process, "Hello world process");
AUTOSTART_PROCESSES(&hello_world_process);
/---------------------------------------------------------------------------/
PROCESS_THREAD(hello_world_process, ev, data)
{
PROCESS_BEGIN();
i = 2.1;
printf("Hello, world\n");
printf("%i\n", (int)pow(10,i));
printf("%i\n", (int)(M_LOG2Ei));
PROCESS_END();
}
/---------------------------------------------------------------------------/

Makefile

CONTIKI_PROJECT = hello-world
all: $(CONTIKI_PROJECT)

CONTIKI = ../..
include $(CONTIKI)/Makefile.include
LDFLAGS += -lm

1 Ответ

0 голосов
/ 15 апреля 2019

Во-первых, вы можете добавить внешние библиотеки в Contiki с помощью:

TARGET_LIBFILES = -lm

Убедитесь, что вы делаете это до include $(CONTIKI)/Makefile.include строки, а не после!

Во-вторых, для какой платформы вы компилируете? Платформы msp430 не имеют функции pow в математической библиотеке. Они имеют только функцию powf, работающую с числами с плавающей запятой одинарной точности, и встроенную (встроенную) функцию pow, работающую с целыми числами.

Если вы хотите работать с числами с плавающей запятой, измените свой код на следующий:

float f = 2.1;
pow(10, f);

к этому

float f = 2.1;
powf(10, f);
...