1. 程式人生 > >在Qt中移植VPU編解碼程式時遇到的問題

在Qt中移植VPU編解碼程式時遇到的問題


在使用freescale開發板實現VPU的硬編碼過程中,將測試程式中關於vpu編碼函式移植到Qt中,在pro檔案中包含 "vpu_lib.h"、"vpu_io.h"的檔案路徑以及對應的連結庫檔案:
  INCLUDEPATH  += "/mnt/hgfs/window_share/linux-3.0.35/include"
  INCLUDEPATH  += "/home/imx6/rootfs/usr/include"
  LIBS += -L"/home/imx6/rootfs/usr/lib" -lvpu


在原始檔中包含了vpu的兩個標頭檔案:
#include "vpu_lib.h"
#include "vpu_io.h"


但會出現如下錯誤提示,經過排查,上面的路徑設定都沒有問題,那麼問題在哪呢?
undefined reference to `vpu_Init(void*)'
undefined reference to `vpu_GetVersionInfo(vpu_versioninfo*)'
undefined reference to `vpu_UnInit()'
undefined reference to `IOGetPhyMem(vpu_mem_desc*)'
undefined reference to `IOGetVirtMem(vpu_mem_desc*)'
undefined reference to `vpu_DecOpen(CodecInst**,........)


解決辦法:
對於在C++中呼叫C語言編寫的函式或C編譯器生成的連結庫檔案,需要新增extern "C"{ },因為C編譯器編譯生成的函式名與C++編譯器生成的函式名不同的。
在原始檔中包含了vpu的兩個標頭檔案則修改為如下形式即可執行通過:
#ifdef __cplusplus
extern "C" {
#endif
#include "vpu_lib.h"
#include "vpu_io.h"
#ifdef __cplusplus
}

#endif