AVR GCC - 使用静态库 - 未定义的引用错误
AVR GCC - Use static library - undefined reference errors
我目前正在尝试使用 AVR atmega328p 从温度传感器 (Dallas ds18b20) 读取值。为了读取值,我需要导入一个外部库 (using this one)。我已经使用外部存储库中的 Makefile 创建了一个静态库(libds18b20.a
in lib
目录)。我还将头文件添加到我自己的源代码中。我有以下 Makefile:
PORT_ID=/dev/ttyACM0
MCU=atmega328p
F_CPU=1200000
CC=avr-gcc
PROGRAMMER_ID=stk500v1
OBJCOPY=avr-objcopy
CFLAGS=-std=c99 -Wall -g -Os -mmcu=${MCU} -DF_CPU=${F_CPU} -I.
TARGET=main
SRCS=main.c
BAUD_RATE=19200
PATH_DS18B20=./lib
all:
${CC} -L ${PATH_DS18B20} ${CFLAGS} -o ${TARGET}.bin ${SRCS}
${OBJCOPY} -j .text -j .data -O ihex ${TARGET}.bin ${TARGET}.hex
flash:
avrdude -v -P ${PORT_ID} -b ${BAUD_RATE} -c ${PROGRAMMER_ID} -p ${MCU} -U flash:w:${TARGET}.hex
clean:
rm -f *.bin *.hex
然而,当我尝试 运行 这个 Makefile 时,我得到了以下错误(输出部分省略):
/main.c:(.text.startup+0x2e): undefined reference to `ds18b20convert'
/main.c:60: undefined reference to `ds18b20read'
这些函数在头文件中定义。我期望静态库没有正确链接。我在这里做错了什么?
我设法通过省略 -L
标志并将路径直接放在 ${SRCS}
变量后面,包括静态库的名称:
PORT_ID=/dev/ttyACM0
MCU=atmega328p
F_CPU=1200000
CC=avr-gcc
PROGRAMMER_ID=stk500v1
OBJCOPY=avr-objcopy
CFLAGS=-std=c99 -Wall -g -Os -mmcu=${MCU} -DF_CPU=${F_CPU} -I.
TARGET=main
SRCS=main.c
BAUD_RATE=19200
PATH_DS18B20=./lib/libds18b20.a
all:
${CC} ${CFLAGS} -o ${TARGET}.bin ${SRCS} ${PATH_DS18B20}
${OBJCOPY} -j .text -j .data -O ihex ${TARGET}.bin ${TARGET}.hex
flash:
avrdude -v -P ${PORT_ID} -b ${BAUD_RATE} -c ${PROGRAMMER_ID} -p ${MCU} -U flash:w:${TARGET}.hex
clean:
rm -f *.bin *.hex
我目前正在尝试使用 AVR atmega328p 从温度传感器 (Dallas ds18b20) 读取值。为了读取值,我需要导入一个外部库 (using this one)。我已经使用外部存储库中的 Makefile 创建了一个静态库(libds18b20.a
in lib
目录)。我还将头文件添加到我自己的源代码中。我有以下 Makefile:
PORT_ID=/dev/ttyACM0
MCU=atmega328p
F_CPU=1200000
CC=avr-gcc
PROGRAMMER_ID=stk500v1
OBJCOPY=avr-objcopy
CFLAGS=-std=c99 -Wall -g -Os -mmcu=${MCU} -DF_CPU=${F_CPU} -I.
TARGET=main
SRCS=main.c
BAUD_RATE=19200
PATH_DS18B20=./lib
all:
${CC} -L ${PATH_DS18B20} ${CFLAGS} -o ${TARGET}.bin ${SRCS}
${OBJCOPY} -j .text -j .data -O ihex ${TARGET}.bin ${TARGET}.hex
flash:
avrdude -v -P ${PORT_ID} -b ${BAUD_RATE} -c ${PROGRAMMER_ID} -p ${MCU} -U flash:w:${TARGET}.hex
clean:
rm -f *.bin *.hex
然而,当我尝试 运行 这个 Makefile 时,我得到了以下错误(输出部分省略):
/main.c:(.text.startup+0x2e): undefined reference to `ds18b20convert'
/main.c:60: undefined reference to `ds18b20read'
这些函数在头文件中定义。我期望静态库没有正确链接。我在这里做错了什么?
我设法通过省略 -L
标志并将路径直接放在 ${SRCS}
变量后面,包括静态库的名称:
PORT_ID=/dev/ttyACM0
MCU=atmega328p
F_CPU=1200000
CC=avr-gcc
PROGRAMMER_ID=stk500v1
OBJCOPY=avr-objcopy
CFLAGS=-std=c99 -Wall -g -Os -mmcu=${MCU} -DF_CPU=${F_CPU} -I.
TARGET=main
SRCS=main.c
BAUD_RATE=19200
PATH_DS18B20=./lib/libds18b20.a
all:
${CC} ${CFLAGS} -o ${TARGET}.bin ${SRCS} ${PATH_DS18B20}
${OBJCOPY} -j .text -j .data -O ihex ${TARGET}.bin ${TARGET}.hex
flash:
avrdude -v -P ${PORT_ID} -b ${BAUD_RATE} -c ${PROGRAMMER_ID} -p ${MCU} -U flash:w:${TARGET}.hex
clean:
rm -f *.bin *.hex