链接avrfix时未定义的引用

时间:2015-03-24 23:27:43

标签: c gcc avr avr-gcc atmega

我尝试在avr-gcc 4.9.2定位atmega644的项目中使用avrfix library

我已经在自述文件中描述了链接avrfix,但是我总是遇到错误,例如

/tmp/ccrUM5Bo.o: In function `imu_calc_gyro':
imu.c:(.text+0x1d8): undefined reference to `lmullkD'
collect2: error: ld returned 1 exit status
Makefile:35: recipe for target 'main.elf' failed
make: *** [main.elf] Error 1

我的avr-gcc调用是

avr-gcc -Wall -Os -fshort-enums -std=c11 -mmcu=$(C_DEVICE) -I$(CINCLUDE)-lavrfix -Wl,-Map=project.map,-L$(LIB_PATH) -o $(OBJDIR)/$@ $^

我认为链接器能够找到avrfix库,因为如果我错误地使用-lavrfix,那么(并且只有这样)链接器会抱怨它找不到库。

如果有人有任何想法,我会非常感激他们。


编辑:已解决!

对于任何有相同问题的人,我最终将编译阶段与Jonathan Leffler和之后的链接器阶段分开 user3629249建议。

我的Makefile的重要摘录:

CFLAGS = -Wall -Wextra -Os -fshort-enums -std=gnu11 -mmcu=$(C_DEVICE) -I$(CINCLUDE) -I.
LDFLAGS = -Map=$(OBJDIR)/drone.map -L/usr/avr/lib/ -L/usr/lib/gcc/avr/4.9.2/avr5/ -lavrfix -lc -lgcc -lm

main.elf: $(OBJS)
    avr-ld $^ $(LDFLAGS) -o $(OBJDIR)/$@

$(OBJDIR)/%.o: $(SRCDIR)/%.c $(HEADERS)
    $(CC) $(CFLAGS) -c $< -o $@

然而,在Ignacio Vazquez-Abrams建议之后,我最终使用了_Frac_Accum的gcc定点函数。为此,我不得不用--enable-fixed-point标志重新编译我的avr-gcc。

0 个答案:

没有答案