DSP

opus交叉编译

2019-07-13 18:23发布

 从上个礼拜四接到带我的老师的任务,了解一下开源的音频编解码库opus,并且将这个开源库交叉编译到xx6138的板子上,看一下测试程序运行时cpu使用率。  先去opus.org上将源代码下载下来,同时看了一点点的Documentation。一开始有点不知所措,按照之前的编译顺序(1)./configure (2)make (3)make install了一番,现在电脑x86_64上跑了一下测试程序opus_demo,发现cpu使用率在96%上下,知道是自己的操作有错误。但是不知道是什么原因,无可奈何,先从最基本的README开始,English真的是一件很头疼的事,看了后面的话忘了前面的话,这是我实习一个半月以来的感受,真的好难受,但是没办法,可能大家都要经历的吧。   有点迷迷糊糊的看完之后,感觉大概知道了要怎么做,如果要进行交叉编译的话,就要在./cnonfigure后面做点手脚。我的做法是CC="csky-abiv2-linux-gcc" ./configure --host=csky,然后在config.sub里面添加相关的cpu。编译是通过了,同时也file 那个测试程序,是我想要的Motorola RCE类型的ELF文件。也算是成功了,但是在sc6138板子上跑的时候的现象是和x86_64一样的。和老师说了之后,第二天老师就和我说cpu厂商中天已经测试过了,cpu使用率还是可以的,听了心里还真的有点难过,花了整整一天的时间最后却没有出来想要的效果,也有点不服气。因为之后又有其他的事情要去完成,所以先搁在一边。   这个礼拜花了差不多两个晚上的非工作时间,总算是把这个问题给解决了。因为configure后面的配置参数有点多,所以我把它写成了脚本的形式,直接执行就可以了。    认认真真的阅读README之后,发现还要在他们官方的仓库下git clone //https:git.xiph.org/opus-tools.git这里面有几个关于编码,解码等测试程序要比之前的opus_demo稳定。同时在之后编译的过程中还需要用到两个库ogg和flac。接下来只要在四个文件下面进行相同的动作就行了。交叉编译的顺序ogg->flac->opus->opus-toos。   主要的改动就是在各创建一个build.sh: CC="xxx-abiv2-linux-gcc" / //指定交叉编译器; CXX="xxx-abiv2-linux-g++" / ./configure /
--host=xxx-abiv2-linux / //指定交叉编译后要运行的平台**这步很重要,没有的话就会编译成x86_64下的ELF文件; LD="xxx-abiv2-linux-ld" / AR="xxx-abiv2-linux-ar" / CFLAGS="-mdsp -O2 -I/usr/local/include" / //指定可包含非默认路径的头文件; LDFLAGS="-L/usr/local/lib -shared -Wl,-rpath=/usr/local/lib" / //指定可包含非默认的库函数,产生共享库,最后那个很重要,不然在编译flac的会出现为定义的错误,这个问题花了我很久的时间   同时如果在执行build.sh文件的时候出现,未知的你写的host名字,那么在每个目录下面的config.sub还要添加进你的cpu平台的名字。   最后中间还会出现两个test文件编译的时候会报未定义的错误,那么就在产生的config.h将对应的宏改成#undef xxx 就行了,也不知道这样做最以后有没有影响。但是最后还是可以编译产生opus的测试文件的。   通过这次也学到了很多吧,首先在接触一个你完全不知道的开源或者其他的工程的时候,首先要仔细的阅读里面的README,这可以省去你之前做的很多无用功。其次上面涉及到的3个开源项目的编译方法是一模一样的,都用到autotool这一套工作,虽然自己现在还没有了解很深入,但是也算是一个知识面的扩展,configure和makefile都可以自己生成。最后gcc后面的参数是一个值得深入了解的东西包括链接时的参数选择。 --host=xxx-abiv2-linux /