도와주세요 undefined reference to `변수/함수'
글쓴이: unuseid / 작성시간: 목, 2016/09/29 - 3:32오후
본래 정상 빌드되던 어플리케이션 A와 B가 있는데
A에게 B가 사용하던 드라이버 소스를 합치려고 하는데 컴파일시 마지막에
undefined reference to `B와 관련된 변수/함수'
오류가 나면서 빌드가 완료 되지 않습니다.
아래는 make 동작후 log입니다
[sdna@vm:~/workspace/wakaama-server-lora]$ make arm-none-linux-gnueabi-gcc -O2 -Icore -Icore/er-coap-13 -Iexamples/shared -Iexamples/client -Iexamples/client/lora -DLWM2M_LITTLE_ENDIAN -DLWM2M_WITH_LOGS -DLWM2M_CLIENT_MODE -DLWM2M_BOOTSTRAP -std=gnu99 -lpthread -c -o packet.o core/packet.c arm-none-linux-gnueabi-gcc -O2 -Icore -Icore/er-coap-13 -Iexamples/shared -Iexamples/client -Iexamples/client/lora -DLWM2M_LITTLE_ENDIAN -DLWM2M_WITH_LOGS -DLWM2M_CLIENT_MODE -DLWM2M_BOOTSTRAP -std=gnu99 -lpthread -c -o management.o core/management.c arm-none-linux-gnueabi-gcc -O2 -Icore -Icore/er-coap-13 -Iexamples/shared -Iexamples/client -Iexamples/client/lora -DLWM2M_LITTLE_ENDIAN -DLWM2M_WITH_LOGS -DLWM2M_CLIENT_MODE -DLWM2M_BOOTSTRAP -std=gnu99 -lpthread -c -o tlv.o core/tlv.c arm-none-linux-gnueabi-gcc -O2 -Icore -Icore/er-coap-13 -Iexamples/shared -Iexamples/client -Iexamples/client/lora -DLWM2M_LITTLE_ENDIAN -DLWM2M_WITH_LOGS -DLWM2M_CLIENT_MODE -DLWM2M_BOOTSTRAP -std=gnu99 -lpthread -c -o discover.o core/discover.c arm-none-linux-gnueabi-gcc -O2 -Icore -Icore/er-coap-13 -Iexamples/shared -Iexamples/client -Iexamples/client/lora -DLWM2M_LITTLE_ENDIAN -DLWM2M_WITH_LOGS -DLWM2M_CLIENT_MODE -DLWM2M_BOOTSTRAP -std=gnu99 -lpthread -c -o observe.o core/observe.c arm-none-linux-gnueabi-gcc -O2 -Icore -Icore/er-coap-13 -Iexamples/shared -Iexamples/client -Iexamples/client/lora -DLWM2M_LITTLE_ENDIAN -DLWM2M_WITH_LOGS -DLWM2M_CLIENT_MODE -DLWM2M_BOOTSTRAP -std=gnu99 -lpthread -c -o registration.o core/registration.c arm-none-linux-gnueabi-gcc -O2 -Icore -Icore/er-coap-13 -Iexamples/shared -Iexamples/client -Iexamples/client/lora -DLWM2M_LITTLE_ENDIAN -DLWM2M_WITH_LOGS -DLWM2M_CLIENT_MODE -DLWM2M_BOOTSTRAP -std=gnu99 -lpthread -c -o list.o core/list.c arm-none-linux-gnueabi-gcc -O2 -Icore -Icore/er-coap-13 -Iexamples/shared -Iexamples/client -Iexamples/client/lora -DLWM2M_LITTLE_ENDIAN -DLWM2M_WITH_LOGS -DLWM2M_CLIENT_MODE -DLWM2M_BOOTSTRAP -std=gnu99 -lpthread -c -o objects.o core/objects.c arm-none-linux-gnueabi-gcc -O2 -Icore -Icore/er-coap-13 -Iexamples/shared -Iexamples/client -Iexamples/client/lora -DLWM2M_LITTLE_ENDIAN -DLWM2M_WITH_LOGS -DLWM2M_CLIENT_MODE -DLWM2M_BOOTSTRAP -std=gnu99 -lpthread -c -o liblwm2m.o core/liblwm2m.c arm-none-linux-gnueabi-gcc -O2 -Icore -Icore/er-coap-13 -Iexamples/shared -Iexamples/client -Iexamples/client/lora -DLWM2M_LITTLE_ENDIAN -DLWM2M_WITH_LOGS -DLWM2M_CLIENT_MODE -DLWM2M_BOOTSTRAP -std=gnu99 -lpthread -c -o bootstrap.o core/bootstrap.c arm-none-linux-gnueabi-gcc -O2 -Icore -Icore/er-coap-13 -Iexamples/shared -Iexamples/client -Iexamples/client/lora -DLWM2M_LITTLE_ENDIAN -DLWM2M_WITH_LOGS -DLWM2M_CLIENT_MODE -DLWM2M_BOOTSTRAP -std=gnu99 -lpthread -c -o uri.o core/uri.c arm-none-linux-gnueabi-gcc -O2 -Icore -Icore/er-coap-13 -Iexamples/shared -Iexamples/client -Iexamples/client/lora -DLWM2M_LITTLE_ENDIAN -DLWM2M_WITH_LOGS -DLWM2M_CLIENT_MODE -DLWM2M_BOOTSTRAP -std=gnu99 -lpthread -c -o json.o core/json.c arm-none-linux-gnueabi-gcc -O2 -Icore -Icore/er-coap-13 -Iexamples/shared -Iexamples/client -Iexamples/client/lora -DLWM2M_LITTLE_ENDIAN -DLWM2M_WITH_LOGS -DLWM2M_CLIENT_MODE -DLWM2M_BOOTSTRAP -std=gnu99 -lpthread -c -o transaction.o core/transaction.c arm-none-linux-gnueabi-gcc -O2 -Icore -Icore/er-coap-13 -Iexamples/shared -Iexamples/client -Iexamples/client/lora -DLWM2M_LITTLE_ENDIAN -DLWM2M_WITH_LOGS -DLWM2M_CLIENT_MODE -DLWM2M_BOOTSTRAP -std=gnu99 -lpthread -c -o data.o core/data.c arm-none-linux-gnueabi-gcc -O2 -Icore -Icore/er-coap-13 -Iexamples/shared -Iexamples/client -Iexamples/client/lora -DLWM2M_LITTLE_ENDIAN -DLWM2M_WITH_LOGS -DLWM2M_CLIENT_MODE -DLWM2M_BOOTSTRAP -std=gnu99 -lpthread -c -o utils.o core/utils.c arm-none-linux-gnueabi-gcc -O2 -Icore -Icore/er-coap-13 -Iexamples/shared -Iexamples/client -Iexamples/client/lora -DLWM2M_LITTLE_ENDIAN -DLWM2M_WITH_LOGS -DLWM2M_CLIENT_MODE -DLWM2M_BOOTSTRAP -std=gnu99 -lpthread -c -o er-coap-13.o core/er-coap-13/er-coap-13.c arm-none-linux-gnueabi-gcc -O2 -Icore -Icore/er-coap-13 -Iexamples/shared -Iexamples/client -Iexamples/client/lora -DLWM2M_LITTLE_ENDIAN -DLWM2M_WITH_LOGS -DLWM2M_CLIENT_MODE -DLWM2M_BOOTSTRAP -std=gnu99 -lpthread -c -o platform.o examples/shared/platform.c arm-none-linux-gnueabi-gcc -O2 -Icore -Icore/er-coap-13 -Iexamples/shared -Iexamples/client -Iexamples/client/lora -DLWM2M_LITTLE_ENDIAN -DLWM2M_WITH_LOGS -DLWM2M_CLIENT_MODE -DLWM2M_BOOTSTRAP -std=gnu99 -lpthread -c -o connection.o examples/shared/connection.c arm-none-linux-gnueabi-gcc -O2 -Icore -Icore/er-coap-13 -Iexamples/shared -Iexamples/client -Iexamples/client/lora -DLWM2M_LITTLE_ENDIAN -DLWM2M_WITH_LOGS -DLWM2M_CLIENT_MODE -DLWM2M_BOOTSTRAP -std=gnu99 -lpthread -c -o memtrace.o examples/shared/memtrace.c arm-none-linux-gnueabi-gcc -O2 -Icore -Icore/er-coap-13 -Iexamples/shared -Iexamples/client -Iexamples/client/lora -DLWM2M_LITTLE_ENDIAN -DLWM2M_WITH_LOGS -DLWM2M_CLIENT_MODE -DLWM2M_BOOTSTRAP -std=gnu99 -lpthread -c -o commandline.o examples/shared/commandline.c arm-none-linux-gnueabi-gcc -O2 -Icore -Icore/er-coap-13 -Iexamples/shared -Iexamples/client -Iexamples/client/lora -DLWM2M_LITTLE_ENDIAN -DLWM2M_WITH_LOGS -DLWM2M_CLIENT_MODE -DLWM2M_BOOTSTRAP -std=gnu99 -lpthread -c -o object_device.o examples/client/object_device.c arm-none-linux-gnueabi-gcc -O2 -Icore -Icore/er-coap-13 -Iexamples/shared -Iexamples/client -Iexamples/client/lora -DLWM2M_LITTLE_ENDIAN -DLWM2M_WITH_LOGS -DLWM2M_CLIENT_MODE -DLWM2M_BOOTSTRAP -std=gnu99 -lpthread -c -o object_location.o examples/client/object_location.c arm-none-linux-gnueabi-gcc -O2 -Icore -Icore/er-coap-13 -Iexamples/shared -Iexamples/client -Iexamples/client/lora -DLWM2M_LITTLE_ENDIAN -DLWM2M_WITH_LOGS -DLWM2M_CLIENT_MODE -DLWM2M_BOOTSTRAP -std=gnu99 -lpthread -c -o lwm2mclient.o examples/client/lwm2mclient.c examples/client/lwm2mclient.c: In function 'get_myIPaddr': examples/client/lwm2mclient.c:163:5: warning: 'return' with a value, in function returning void [enabled by default] return 0; ^ examples/client/lwm2mclient.c: In function 'lora_rx': examples/client/lwm2mclient.c:202:21: warning: passing argument 1 of 'output_buffer_simple' from incompatible pointer type [enabled by default] output_buffer_simple(Buffer, BufferSize, 1); ^ In file included from examples/client/lwm2mclient.c:100:0: examples/client/./lora/output.h:12:6: note: expected 'uint8_t *' but argument is of type 'uint16_t *' void output_buffer_simple(uint8_t * buffer, int length, int indent); ^ examples/client/lwm2mclient.c:211:21: warning: passing argument 1 of 'output_buffer_simple' from incompatible pointer type [enabled by default] output_buffer_simple(&Buffer[4], BufferSize - 4, 1); ^ In file included from examples/client/lwm2mclient.c:100:0: examples/client/./lora/output.h:12:6: note: expected 'uint8_t *' but argument is of type 'uint16_t *' void output_buffer_simple(uint8_t * buffer, int length, int indent); ^ examples/client/lwm2mclient.c:221:15: warning: passing argument 4 of 'pthread_create' makes pointer from integer without a cast [enabled by default] int state = pthread_create(&tid,NULL,thread_create_recvport,Buffer[3]); ^ In file included from examples/client/lwm2mclient.c:86:0: /opt/arm-2014.05/arm-none-linux-gnueabi/libc/usr/include/pthread.h:244:12: note: expected 'void * restrict' but argument is of type 'uint16_t' extern int pthread_create (pthread_t *__restrict __newthread, ^ arm-none-linux-gnueabi-gcc -O2 -Icore -Icore/er-coap-13 -Iexamples/shared -Iexamples/client -Iexamples/client/lora -DLWM2M_LITTLE_ENDIAN -DLWM2M_WITH_LOGS -DLWM2M_CLIENT_MODE -DLWM2M_BOOTSTRAP -std=gnu99 -lpthread -c -o object_security.o examples/client/object_security.c arm-none-linux-gnueabi-gcc -O2 -Icore -Icore/er-coap-13 -Iexamples/shared -Iexamples/client -Iexamples/client/lora -DLWM2M_LITTLE_ENDIAN -DLWM2M_WITH_LOGS -DLWM2M_CLIENT_MODE -DLWM2M_BOOTSTRAP -std=gnu99 -lpthread -c -o system_api.o examples/client/system_api.c arm-none-linux-gnueabi-gcc -O2 -Icore -Icore/er-coap-13 -Iexamples/shared -Iexamples/client -Iexamples/client/lora -DLWM2M_LITTLE_ENDIAN -DLWM2M_WITH_LOGS -DLWM2M_CLIENT_MODE -DLWM2M_BOOTSTRAP -std=gnu99 -lpthread -c -o object_server.o examples/client/object_server.c arm-none-linux-gnueabi-gcc -O2 -Icore -Icore/er-coap-13 -Iexamples/shared -Iexamples/client -Iexamples/client/lora -DLWM2M_LITTLE_ENDIAN -DLWM2M_WITH_LOGS -DLWM2M_CLIENT_MODE -DLWM2M_BOOTSTRAP -std=gnu99 -lpthread -c -o object_access_control.o examples/client/object_access_control.c arm-none-linux-gnueabi-gcc -O2 -Icore -Icore/er-coap-13 -Iexamples/shared -Iexamples/client -Iexamples/client/lora -DLWM2M_LITTLE_ENDIAN -DLWM2M_WITH_LOGS -DLWM2M_CLIENT_MODE -DLWM2M_BOOTSTRAP -std=gnu99 -lpthread -c -o object_firmware.o examples/client/object_firmware.c arm-none-linux-gnueabi-gcc -O2 -Icore -Icore/er-coap-13 -Iexamples/shared -Iexamples/client -Iexamples/client/lora -DLWM2M_LITTLE_ENDIAN -DLWM2M_WITH_LOGS -DLWM2M_CLIENT_MODE -DLWM2M_BOOTSTRAP -std=gnu99 -lpthread -c -o object_connectivity_stat.o examples/client/object_connectivity_stat.c arm-none-linux-gnueabi-gcc -O2 -Icore -Icore/er-coap-13 -Iexamples/shared -Iexamples/client -Iexamples/client/lora -DLWM2M_LITTLE_ENDIAN -DLWM2M_WITH_LOGS -DLWM2M_CLIENT_MODE -DLWM2M_BOOTSTRAP -std=gnu99 -lpthread -c -o object_connectivity_moni.o examples/client/object_connectivity_moni.c arm-none-linux-gnueabi-gcc -O2 -Icore -Icore/er-coap-13 -Iexamples/shared -Iexamples/client -Iexamples/client/lora -DLWM2M_LITTLE_ENDIAN -DLWM2M_WITH_LOGS -DLWM2M_CLIENT_MODE -DLWM2M_BOOTSTRAP -std=gnu99 -lpthread -c -o test_object.o examples/client/test_object.c arm-none-linux-gnueabi-gcc packet.o management.o tlv.o discover.o observe.o registration.o list.o objects.o liblwm2m.o bootstrap.o uri.o json.o transaction.o data.o utils.o er-coap-13.o platform.o connection.o memtrace.o commandline.o object_device.o object_location.o lwm2mclient.o object_security.o system_api.o object_server.o object_access_control.o object_firmware.o object_connectivity_stat.o object_connectivity_moni.o test_object.o examples/client/lora/sx1276-Hal.o examples/client/lora/rawudp.o examples/client/lora/sx1276.o examples/client/lora/spi.o examples/client/lora/gpio.o examples/client/lora/sx1276-Fsk.o examples/client/lora/sx1276-LoRa.o examples/client/lora/sx1276-FskMisc.o examples/client/lora/radio.o examples/client/lora/output.o examples/client/lora/sx1276-LoRaMisc.o -lm -o lwm2mclient lwm2mclient.o: In function `lora_rx': lwm2mclient.c:(.text+0xa38): undefined reference to `pthread_create' lwm2mclient.c:(.text+0xb2c): undefined reference to `thread_create_recvport' lwm2mclient.c:(.text+0xb4c): undefined reference to `RxPacketRssiValue' lwm2mclient.c:(.text+0xb50): undefined reference to `RxPacketSnrEstimate' examples/client/lora/sx1276-LoRa.o: In function `SX1276LoRaGetPacketSnr': sx1276-LoRa.c:(.text+0x4fc): undefined reference to `RxPacketSnrEstimate' examples/client/lora/sx1276-LoRa.o: In function `SX1276LoRaGetPacketRssi': sx1276-LoRa.c:(.text+0x524): undefined reference to `RxPacketRssiValue' examples/client/lora/sx1276-LoRa.o: In function `SX1276LoRaProcess': sx1276-LoRa.c:(.text+0x12c4): undefined reference to `RxPacketSnrEstimate' sx1276-LoRa.c:(.text+0x12dc): undefined reference to `RxPacketRssiValue' collect2: error: ld returned 1 exit status Makefile:34: 'lwm2mclient' 타겟에 대한 명령이 실패했습니다 make: *** [lwm2mclient] 오류 1 [sdna@vm:~/workspace/wakaama-server-lora]$ vi Make
d위 동작에 사용한 Makefile입니다
CC = gcc -g -ggdb LD = gcc -g -ggdb #CC = arm-none-linux-gnueabi-gcc #LD = arm-none-linux-gnueabi-gcc SRCDIR1 = core SRCDIR2 = core/A SRCDIR3 = examples/A-1 SRCDIR4 = examples/A SRCDIR5 = examples/A/B-드라이버 소스폴더 < ----------------------------------이부분 추가 VPATH = $(SRCDIR1) $(SRCDIR2) $(SRCDIR3) $(SRCDIR4) $(SRCDIR5) #CFLAGS = -O2 -I$(SRCDIR1) -I$(SRCDIR2) -I$(SRCDIR3) -I$(SRCDIR4) -DLWM2M_LITTLE_ENDIAN -DLWM2M_WITH_LOGS -DLWM2M_SERVER_MODE -DDEBUG CFLAGS = -O2 -I$(SRCDIR1) -I$(SRCDIR2) -I$(SRCDIR3) -I$(SRCDIR4) -I$(SRCDIR5) -DLWM2M_LITTLE_ENDIAN -DLWM2M_WITH_LOGS -DLWM2M_CLIENT_MODE -DLWM2M_BOOTSTRAP -std=gnu99 -lpthread LDFLAGS = -lpthread TARGET = lwm2mclient SRCS = $(foreach dir, .. $(SRCDIR1) $(SRCDIR2) $(SRCDIR3) $(SRCDIR4) $(SRCDIR5), $(wildcard $(dir)/*.c)) SRCS := $(notdir $(SRCS)) OBJS = $(SRCS:.c=.o) all: $(TARGET) $(TARGET): $(OBJS) $(LD) $^ -lm -o $(TARGET) %o:%c $(CC) $(CFLAGS) -c $< -o $@ clean: -rm -f $(OBJS) -rm -f $(TARGET) depend: $(SRCS) $(CC) -M $(CFLAGS) $^ > $@ -include depend
아래는 원래 B를 빌드할때 사용하던 Makefile 입니다
CC=/home/nodelink/opt/arm-2014.05/bin/arm-none-linux-gnueabi-gcc #CFLAGS=-std=gnu99 -lpthread -lrt -DNOASSERT CFLAGS=-std=gnu99 -lpthread OBJS=main.o spi.o gpio.o sx1276.o sx1276-Hal.o sx1276-LoRa.o sx1276-LoRaMisc.o sx1276-Fsk.o sx1276-FskMisc.o radio.o rawudp.o output.o TARGET = lora_gateway_semtech .SUFFIXES : .c .o all : $(TARGET) $(TARGET): $(OBJS) $(CC) -lm -o $@ $(OBJS) $(CFLAGS) clean : rm -f $(OBJS) $(TARGET)
Forums:
링크 옵션 지정 문제네요.
링크 옵션 지정 문제네요.
링크하는 라이브러리 순서에 따라서 문제 생기기도 하고요.
링크시에 -l 옵션만 넣으면 /etc/ld.so.conf에 지정된 경로에서만 라이브러리 찾습니다.
딴데서도 찾도록 할려면 -L까지 넣어야 합니다.
코드 만드신 분이 무슨 라이브러리 필요로 하는지 잘 아시겠죠.
Written By the Black Knight of Destruction
감사합니다
Necromancer 님 댓글에서 힌트를 얻어 빌드에 성공 했습니다!! 감사합니다!
`B와 관련된 변수/함수' 라 주장하시는 것들이 $
$(SRCDIR5) 문자열에 공백이 없어야 합니다.
`B와 관련된 변수/함수' 라 주장하시는 것들이 $(SRCDIR5) 디렉토리에 있는 *.c 파일들 중의 어느 것에든 구현되어 있는 게 확실한가요 ?
pthread 의 컴파일/링크 플래그는 -pthread 입니다.
$(LDFLAGS) 는 $(LD) 를 호출 할 때 사용해야 할 옵션입니다.
감사합니다
bushi 님 댓글에서 힌트를 얻어 빌드에 성공 했습니다!! 감사합니다!
댓글 달기