【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函數了,這也就是鏈接的作用。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM