Contiki: การอ้างอิงที่ไม่ได้กำหนดไปยังฟังก์ชันที่กำหนดไว้ในไฟล์ต้นฉบับแยกต่างหาก

ฉันกำลังเขียนโปรแกรมโดยใช้ระบบปฏิบัติการ Contiki

ฉันมีไฟล์ remote_firmware.c และโฟลเดอร์ชื่อ parser พร้อมไฟล์ parser.h และ parser.c ที่ฉันเขียนเมธอด void test() ฉันรวม parser.h ไว้ใน remote_firmware.c ด้วย:

#include "parser/parser.h"

Makefile มีลักษณะดังนี้:

CONTIKI_PROJECT = remote_firmware
all: $(CONTIKI_PROJECT)

#UIP_CONF_IPV6=1

CONTIKI_WITH_RIME = 1
CONTIKI = $(HOME)/contiki

include $(CONTIKI)/Makefile.include

เมื่อฉันพยายามสร้างสิ่งนี้ เกิดข้อผิดพลาด:

การอ้างอิงที่ไม่ได้กำหนดถึง 'ทดสอบ'

ฉันทราบว่า Makefile จำเป็นต้องรู้เกี่ยวกับ parser.h แต่ฉันไม่รู้ว่าจะต้องทำอย่างไร ฉันลองวิธีแก้ปัญหาหลายอย่างที่เสนอไว้ที่นี่ แต่ฉันคิดว่าฉันทำอะไรผิด อาจมีใครสักคนรู้ว่าต้องทำอย่างไร?

ขอบคุณมาก.


person Stormregion0    schedule 11.01.2018    source แหล่งที่มา
comment
หากต้องการทำให้บรรทัดในคำถามของคุณดูเหมือน 'รหัส' ให้เยื้องช่องว่าง 4 บรรทัด มิฉะนั้น เส้นทั้งหมดจะวิ่งเข้าหากัน (ดังที่คุณเห็นในคำถามของคุณ)   -  person user3629249    schedule 12.01.2018


คำตอบ (2)


ไฟล์ต้นฉบับของคุณอยู่ที่ไหน? ลองเพิ่มชื่อไฟล์ต้นฉบับให้กับตัวแปรตัวประมวลผลล่วงหน้า PROJECT_SOURCEFILES (เช่น PROJECT_SOURCEFILES+=parser.c) และเพิ่มตำแหน่งของไฟล์ต้นฉบับไปยังตัวแปรตัวประมวลผลล่วงหน้า CONTIKIDIRS (เช่น CONTIKIDIRS+={Directory})

หาก parser.c ขึ้นอยู่กับไฟล์ C อื่นๆ จำนวนมาก คุณอาจต้องการสร้างไฟล์เก็บถาวรไลบรารี C ก่อน จากนั้นจึงเพิ่มไลบรารีลงในโปรเจ็กต์ของคุณโดยการเพิ่มชื่อของไลบรารีให้กับตัวแปร TARGET_LIBFILES

person KillaKem    schedule 18.01.2018

ข้อผิดพลาด undefined reference to test เป็นข้อผิดพลาดจากตัวเชื่อมโยง ไม่ใช่คอมไพเลอร์ มันไม่เกี่ยวอะไรกับการใส่ไฟล์ส่วนหัว หมายความว่าเมื่อคุณเชื่อมโยงไฟล์ปฏิบัติการแล้ว คุณไม่ได้รวม parser.o ไว้ด้วย

person cleblanc    schedule 11.01.2018
comment
ใช่. มันเป็นปัญหากับ Makefile: CONTIKI_PROJECT = remote_firmware all: $(CONTIKI_PROJECT) #UIP_CONF_IPV6=1 PROJECT_SOURCEFILES += parser/parser.c CONTIKI_WITH_RIME = 1 CONTIKI = $(HOME)/contiki include $(CONTIKI)/Makefile.include ฉันเพิ่มบรรทัด PROJECT_SOURCEFILES += parser/parser.c แต่ยังคง: › การเปิดไฟล์อ้างอิง obj_zoul/parser/parser.d: ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว - person Stormregion0; 12.01.2018