【正点原子阿尔法 IMX6ULL Linux开发板】解决inline报错问题——LCD测试
[复制链接]
开发板支持RBG屏,今天测试RGB测试时,发现编译报错。
把开发板例程复制到虚拟机,用vscode打开文件夹。执行行make时报错:
bsp/lcd/bsp_lcd.h:85:13: warning: inline function ‘lcd_drawpoint’ declared but never defined
85 | inline void lcd_drawpoint(unsigned short x,unsigned short y,unsigned int color);
| ^~~~~~~~~~~~~
arm-linux-gnueabihf-ld -Timx6ul.lds -o lcd.elf obj/start.o obj/lib1funcs.o obj/main.o obj/ctype.o obj/muldi3.o obj/div64.o obj/string.o obj/vsprintf.o obj/printf.o obj/bsp_clk.o obj/bsp_led.o obj/bsp_delay.o obj/bsp_beep.o obj/bsp_gpio.o obj/bsp_key.o obj/bsp_exit.o obj/bsp_int.o obj/bsp_epittimer.o obj/bsp_keyfilter.o obj/bsp_uart.o obj/bsp_lcd.o obj/bsp_lcdapi.o -lgcc -L /usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/lib/gcc/arm-linux-gnueabihf/4.9.4
arm-linux-gnueabihf-ld: obj/bsp_lcd.o: in function `lcd_fill':
bsp_lcd.c:(.text+0x730): undefined reference to `lcd_drawpoint'
arm-linux-gnueabihf-ld: obj/bsp_lcdapi.o: in function `lcd_drawline':
bsp_lcdapi.c:(.text+0x60): undefined reference to `lcd_drawpoint'
arm-linux-gnueabihf-ld: obj/bsp_lcdapi.o: in function `lcd_draw_Circle':
bsp_lcdapi.c:(.text+0x15a): undefined reference to `lcd_drawpoint'
arm-linux-gnueabihf-ld: bsp_lcdapi.c:(.text+0x176): undefined reference to `lcd_drawpoint'
arm-linux-gnueabihf-ld: bsp_lcdapi.c:(.text+0x188): undefined reference to `lcd_drawpoint'
arm-linux-gnueabihf-ld: obj/bsp_lcdapi.o:bsp_lcdapi.c:(.text+0x19c): more undefined references to `lcd_drawpoint' follow
【问题的原因】
经查找出错原因是:lcd_drawpoint函数没有找到。但是分明函数是已经有建立并且头文件等引用也是正确。经查找原因是由于inline函数与编译器配合不好引起的。
【解决办法】
把inline函数放到头文件中声明。
我们反bsp_lcd.c中的lcd_drawpoint函数放到bsp_lcd.h中定义:
然后再执行编译就顺利通过:
【实验结果】下载固件到开发板后,实现如下效果:
【总结】gcc编译器版本不同,有时一些特殊的情况,在编写代码时,也需要注意。
|