折腾了两天终于搞定,现在把折腾的过程记录一下。
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
大功告成。