使用ipp静态库,ipp-samples在linux下的make过程

折腾了两天终于搞定,现在把折腾的过程记录一下。

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

大功告成。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章