Hi3516DV300芯片報錯“ undefined reference to ×”


 

 

我在使用海思硬件接口的時候,用到了mpi庫,然后Makefile里面鏈接了這個庫,但是編譯到了鏈接的時候報錯了:

./lib//libmpi.so: undefined reference to `sem_post'
./lib//libmpi.so: undefined reference to `snprintf_s'
./lib//libmpi.so: undefined reference to `sincos'
./lib//libmpi.so: undefined reference to `HI_DNVQE_ReadFrame'
./lib//libmpi.so: undefined reference to `HI_VOICE_EncodeFrame'
./lib//libmpi.so: undefined reference to `atan2'
./lib//libmpi.so: undefined reference to `HI_UPVQE_Create'
./lib//libmpi.so: undefined reference to `HI_UPVQE_SetVolume'
./lib//libmpi.so: undefined reference to `sem_trywait'
./lib//libmpi.so: undefined reference to `acos'
./lib//libmpi.so: undefined reference to `HI_UPVQE_GetVolume'
./lib//libmpi.so: undefined reference to `HI_VOICE_DecReset'
./lib//libmpi.so: undefined reference to `HI_DNVQE_WriteFrame'
./lib//libmpi.so: undefined reference to `HI_DNVQE_Create'
./lib//libmpi.so: undefined reference to `sin'
./lib//libmpi.so: undefined reference to `HI_UPVQE_Destroy'
./lib//libmpi.so: undefined reference to `HI_UPVQE_GetConfig'
./lib//libmpi.so: undefined reference to `sem_getvalue'
./lib//libmpi.so: undefined reference to `sem_wait'
./lib//libmpi.so: undefined reference to `HI_VOICE_EncReset'
./lib//libmpi.so: undefined reference to `sem_init'
./lib//libmpi.so: undefined reference to `HI_UPVQE_ReadFrame'
./lib//libmpi.so: undefined reference to `memcpy_s'
./lib//libmpi.so: undefined reference to `tan'
./lib//libmpi.so: undefined reference to `HI_UPVQE_WriteFrame'
./lib//libmpi.so: undefined reference to `memmove_s'
./lib//libmpi.so: undefined reference to `pthread_join'
./lib//libmpi.so: undefined reference to `HI_VOICE_DecodeFrame'
./lib//libmpi.so: undefined reference to `pthread_create'
./lib//libmpi.so: undefined reference to `pow'
./lib//libmpi.so: undefined reference to `round'
./lib//libmpi.so: undefined reference to `log10'
./lib//libmpi.so: undefined reference to `HI_DNVQE_GetConfig'
./lib//libmpi.so: undefined reference to `sqrt'
./lib//libmpi.so: undefined reference to `sem_destroy'
./lib//libmpi.so: undefined reference to `memset_s'
./lib//libmpi.so: undefined reference to `strncpy_s'
./lib//libmpi.so: undefined reference to `HI_DNVQE_Destroy'

  這些信號相關的函數鏈接pthread庫,HI_*相關的接口去文檔查屬於哪個庫,或許我的文檔跟當前開發板不匹配,我連續找了三個沒找到,不過這么火的芯片別人肯定也用過,所以方案一直接上網搜該函數;方案二我有一份領導給的頭文件和庫文件,我到整個頭文件里面能找到相應的函數,然后就去把名字差不多的庫文件鏈接進去,果然編譯通過了。還有要特別注意的是基礎庫要靠右側。最后,strncpy_s等幾個函數海思有自己的實現,在庫libsecurec.so(或靜態庫libsecurec.a)里面,這個基礎庫要靠右側放。

 

附上自己的Makefile吧,省得下次忘記了

CC       = arm-himix200-linux-gcc
CCFLAGS   = -Wall -O -g

INCLUDE  = -I ./include 
# 可執行文件的名字
TARGET   = encJpeg


# 鏈接 libmpi.a等庫文件
LIBPATH  = -L ./lib/
LIBNAME   =  -lmpi -live -lupvqe -ldnvqe  -lVoiceEngine -lpthread  -lsecurec


#正則表達式表示目錄下所有.c文件,
C_SRCS= $(wildcard ./src/*.c)

# 第一行依賴關系:冒號后面為依賴的文件
# 第二行規則:$@表示目標文件,$^表示所有依賴文件,$<表示第一個依賴文件
$(TARGET): $(C_SRCS)		
	$(CC)   $(CCFLAGS) $(INCLUDE)  $(LIBPATH) $(LIBNAME)  -o ./build/$@  $^


# make clean刪除所有.o和目標文件
clean:
	rm -f ./build/* 
	



 

  


免責聲明!

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



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