折騰了兩天終於搞定,現在把折騰的過程記錄一下。
1、先安裝ipp8,運行install.sh進行安裝,安裝過程選擇評估版,因爲我們也只是需要它的庫,使用並不影響。
2、安裝cpp_studio_xe_2013_sp1_update2,和1一樣,運行install.sh,比較簡單。
----我現在懷疑第1步可以省略,因爲intel的cpp studio xe裏面實際上包含了ipp的頭文件和庫,當然我沒有進行驗證。
3、安裝編譯ipp-sample,我下載的是這個包:l_ipp-samples_p_7.1.1.013.tgz,解包,然後進入到這個目錄:
cd ipp-samples.7.1.1.013/builder
這個安裝會遇到一些問題,步驟如下:
1)、運行環境變量設置,執行下面兩條命令:
source /opt/intel/ipp/bin/ippvars.sh intel64
source /opt/intel/bin/compilervars.sh intel64
2)、運行:
perl build.pl --cmake=speech-codecs,intel64,make,s,mt,release --comp=native --build
這個命令會調用cmake生成makefile文件並進行編譯構建(我的應用只需要speech-codecs相關的語音codec庫),但跑不下去,會報錯:
IPPROOT not found
但用echo $IPPROOT查環境變量並檢查實際的目錄是正確的,後來分析FindIPP.cmake文件發現問題,原來這個ipp-sample7對應的ipp版本比較老,假定使用的ipp庫還有_l之類的後綴,比如libip pcore_l.a,但cpp_studio_xe_2013_sp1_update2這個版本的ipp庫已經沒有這些後綴了。
打開FindIPP.cmake修改:
將第30行和第35行的語句:
set( LIBS_IPP_SUF _l )或set( LIBS_IPP_SUF _s)
改爲:
set( LIBS_IPP_SUF "" )
然後就可以順利build了。
4、寫個小程序測試一下,比如寫一段代碼測試下g729的codec,代碼就不貼了,重點不在這裏,我自己手寫的makefile,會報告一堆未定義的函數引用,經過一番分析,必須注意makefile裏面的靜態庫加載順序,顛倒了就不行。
下面貼出我正確的順序:
-Bstatic -L /root/ipp-samples.7.1.1.013/__cmake/speech-codecs.intel64.make.s.mt.release/__lib/release \
-lspeech_g729i -lspeech_g729fp -lspeech_alc -lspeech_amrwbe -lspeech_ec -lspeech_g722.1 \
-lspeech_g723.1 -lspeech_g728 -lspeech_gsmamr -lspeech_nr -lspeech_vad\
-lspeech_amrwb -lspeech_common -lspeech_g711 -lspeech_g722 -lspeech_g726 -lspeech_g729.1 -lspeech_gsmfr -lspeech_td -lvm \
-Bstatic -L /opt/intel/composer_xe_2013_sp1.2.144/ipp/lib/intel64 \
-lippsc -lipps -lippac -lippcc -lippch -lippcv -lippdc -lippdi -lippgen -lippi -lippj -lippm -lippr -lippvc -lippcore -lippvm -lirc \
-static -static-libgcc -static-libstdc++ -Bstatic -lpthread -Bstatic -ldl
大功告成。