Uboot 编译问题-“xxx aliased to external symbol xxx”

Uboot 编译问题-

“xxx aliased to external symbol xxx”

编译器 arm-linux-gnueabi-gcc 7.4 (ubuntu1804)
Uboot 2010-03 (iTopeet4412)

编译时出现错误:
board.c:105:6: error: ‘coloured_LED_init’ aliased to external symbol ‘__coloured_LED_init’
void coloured_LED_init (void) attribute((weak, alias("__coloured_LED_init")));
以及几个同类错误问题。

找出源文件:
find -name board.c
定为到
./lib_arm/board.c 105行:

void inline __coloured_LED_init (void) {}
void coloured_LED_init (void) attribute((weak, alias("__coloured_LED_init")));

编译器提示结果是别名冲突,coloured_LED_init 函数为weak属性,可由外部重新定义,alias可对外别名为__coloured_LED_init ,而__coloured_LED_init申明为inline内联函数。

查阅资料,gcc中似乎有规定,内联(inline)函数是不能添加弱符号定义(weak)。

个人理解是,inline函数相当于宏替换。alias应该是函数别名,如果对外申明了函数别名(alias),那么coloured_LED_init即是函数__coloured_LED_init,而该函数申明为inline后,在编译时被宏替换,即没有改函数实体,如果外部程序需要条用,是找不到的,自然编译不会通过。因此,这两个属性(inline和weak)不能同时申明。

尝试解决:
1:去掉__coloured_LED_init 函数的inline修饰,函数效率略有降低,但对整个编译过程改动几乎不用改动。
2:保留inline,去掉weak修饰,保证原有效率,但所有c文件中引用alias修饰名的函数全部要修改(参考)

Tick:Vim 下使用dw可以在浏览模式下删除光标所在的单词的后面几个字母。。。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值