【makefile】symbol <函数> : can't resolve symbol 问题分析

  调试程序的时候,在linux编译器上可以编译通过,但是编译生成的firmware烧录到板子上的后出现以下异常:

  

  can't resolve symbol,无法解析元素符号。

  review一下code,定义setBuappValue这个api的.c文件的部分makefile如下

HI_PKG_NAME = odlapi
HI_APP_NAME = libhi_odlapi.so
HI_APP_TYPE = so

  可以看到这个api实际上会生成libhi_odlapi.so这个库。编译没有问题是因为C逻辑语法没有问题,但是在其他module中有调用setBuappValue,getBuappValue这两个api,但是没有将libhi_odlapi.so这个库链过去。所以在调用这个api的其他的module中的function无法实现,出现以上问题。

  解决办法,只需要在调用此api的.c文件的makefile文件链上libhi_odlapi.so,问题解决

HI_LDFLAGS+=-lhi_odlapi

 

  tips:为什么刚开始学习makefile是,写的.c文件里可以直接调用printf等一些common的api呢,因为在预编译阶段包含进去的“stdio.h”里面,其实系统把对这些函数的实现都做到名字为libc.so.6的库文件中去了,在没有特别指定时,gcc会到系统默认的路径“/user/lib”下面进行查找,并且链接到lib.so.6库函数中去,这样就能实现printf函数了,这也就是链接的作用。

 

posted @ 2018-09-04 16:21  稀客  阅读(4738)  评论(0编辑  收藏  举报