調試程序的時候,在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函數了,這也就是鏈接的作用。