调试程序的时候,在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函数了,这也就是链接的作用。