2017-02-02 7 views
0

makefilemath.h을 포함하고 1.cLDLIBS=-lm을 포함 시켰습니다.sqrt에 대한 정의되지 않은 참조

1c와 2.c는 현재 디렉토리에있는 일부 파일입니다. 다음과 같이

만들기 파일은 다음과 같습니다

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 

내가 읽고 관련 유래의 질문에 있지만없는이 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도 실행하고 Makefile을 디버그하려면 과 같이 remake을 사용하십시오.

gcc에 대한 프로그램 인수의 순서는 중요합니다. 먼저 장을 읽고 설명서의 gcc을 읽으십시오. CFLAGS+= 행에 추가 될 수있는 -Wall -g (모든 경고를 얻으려면 & 디버그 정보)로 컴파일하려고합니다. 아마도 당신의 LDLIBS=-lm 라인 LIBES= -lm을해야

CFLAGS+= -DPERIOD=$(PERIOD) 아마도 당신의
CFLAGS=-DPERIOD=$(PERIOD) 라인이 있어야한다.

Undefined reference: sqrt 컴파일 명령 (make에 의해 실행)에 누락되었거나 잘못된 순서로 메시지가 있기 때문에 메시지가 표시 될 수 있습니다.

+0

당신이 옳았습니다. Makefile.include에'-lm'을 추가했습니다. 다른 오류가 있지만이 오류를 제거했습니다. 감사! –

+0

'$ (CONTIKI)/Makefile.include'을 엉망으로 만들 필요가 없다고 생각합니다. –

+0

그런 경우 어떻게해야합니까? –