- 大家好!我来自南京,在OpenHarmony成长打算啃论文俱乐部,与
华为、软通能源、润和软件、拓维信息、深开鸿
等公司一起,学习和钻研操作系统技术
,
从往年1月11日退出OpenHarmony俱乐部曾经有靠近8个月工夫了。笔者始终在思考啃论文给我带来了些什么,通过啃论文能为OpenHarmony做些什么。笔者利用大二升大三寒假两个月工夫移植了Speexdsp这个三方库到OpenHarmony规范零碎,而对于后面的问题我仿佛找到了答案,现将啃论文和三方库移植分享教训如下:
因为想要分享的内容较多,为防止观众姥爷们失去看上来的急躁,分享将以连载的形式进行。
本期为移植speexdsp到OpenHarmony规范零碎
的第①期,次要内容如下:
Speexdsp
提到Speexdsp不得不先提到开源语音编解码器Speex
如下是ACM Surveys中收录的题目为《Survey on Application-Layer Mechanisms for Speech Quality Adaptation in VoIP》综述中的一张图表。
- 它总结了一些罕用的可变比特率编解码器,并且做了性能方面的比拟。
- 其中惟一Open-source开源的两个编解码器之一就是speex。
- 2007年12月11日Speex1.2beta3中首次将Speex中所有非编解码器组件(预处理器、回声打消、抖动缓冲区)都已移至新的libspeexdsp中。
- 2014年12月6日推出的Speex 1.2rc2和SpeexDSP1.2rc2正式将speex编解码器库和speexDSP库拆分为独自的源代码。
Speexdsp性能
预处理器
预处理器被设计为在运行编码器之前在音频上应用。预处理器提供三个次要性能:
- 噪声克制
- 自动增益管制(AGC)
- 语音流动检测(VAD)
自适应抖动缓冲区
- 当通过UDP或RTP传输语音(或任何相干内容)时,包可能会失落,以不同的提早达到,甚至乱序。
- 抖动缓冲区的目标是从新排序数据包,并缓冲足够长的工夫,以便它们能够被发送以进行解码。
声学回声消除器
回声打消是为了进步远端品质
- 在任何免提通信零碎中,远端语音通过本地扬声器播放。音频在房间内流传,并被麦克风捕捉。如果从麦克风捕捉的音频被间接发送到近程端,那么用户就会听到远端语音的回声。声学回声消除器设计用于在声学回声发送到远端之前打消它。
重采样器
这个重采样器能够用于在任意两个速率之间进行转换(比率必须是有理数),并且能够管制品质/复杂性的衡量。
- 重采样器在某些状况下将音频从一个采样率转换到另一个采样率。
- 它能够用于混合具备不同采样率的流、用于反对声卡不反对的采样率、用于转码等。
Speexdsp移植到OpenHarmony规范零碎
OpenHarmony三方库次要是基于规范 Linux 零碎的 c/c++ 开源库,所以三方库的移植工作,首先是在规范 Linux 零碎搭建环境、编译与验证,而后将三方库的编译退出到 OpenHarmony 工程的构建中。
三方库移植的次要开发步骤如下:
- 在规范Linux零碎下载三方库源码,搭建开发环境,编译整个源码工程;
- 剖析在规范Linux零碎的编译过程文件,提取编译须要的源文件、编译依赖等信息;
- 依据上一步剖析后果,编写gn文件,将三方库退出到OpenHarmony的编译体系;
- 验证编译后果,在OpenHarmony的out目录是否生成指标库;
- 测试demo/测试单元用例执行。
一、下载源码
- 下载三方库源码时,优先应用最新版,不要下载master分支,下载最新的版本分支。
移植speexdsp下载的是1.2.1
版本。
Speexdsp源码下载地址:https://github.com/xiph/speexdsp
二、搭建开发环境,生成Makefile编译构建speexdsp。
- 不同的原生三方库提供的编译形式不雷同,依据原生三方库的readme文件或者manual用户手册能够晓得该如何编译
Speexdsp在linux下的编译装置,在linux终端输出如下语句:
装置make工具。
sudo apt-get install make
装置autoAutotools工具
sudo apt-get install autoconf automake libtool
GNU Autotools框架包含三个次要的包:Autoconf,Automake,和Libtool。
GNU软件的构建过程,一般来说, 蕴含三个步骤:
tar xfv xxx.tar.gz
./configure
make
make install
该过程个别依赖两个文件, configure和Makefile文件。
- Autoconf/Automake就是一套用于主动构建configure脚本和Makefile文件的工具。
个别应用Makefile.am构建的三方库,原生库中存在autogen.sh,configure.ac文件。由makefile.am主动生成makefile。
./autogen.sh
- ./autogen.sh之后咱们能够运行./configure --help查看configure配置
./configure --help
[email protected]:~/Desktop/SpeexDSP-1.2.1$ ./configure --help`configure' configures speexdsp 1.2.1 to adapt to many kinds of systems.Usage: ./configure [OPTION]... [VAR=VALUE]...To assign environment variables (e.g., CC, CFLAGS...), specify them asVAR=VALUE. See below for descriptions of some of the useful variables.Defaults for the options are specified in brackets.Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print `checking ...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for `--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or `..']Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [/usr/local] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX]By default, `make install' will install all the files in`/usr/local/bin', `/usr/local/lib' etc. You can specifyan installation prefix other than `/usr/local' using `--prefix',for instance `--prefix=$HOME'.For better control, use the options below.Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/speexdsp] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR]Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program namesSystem types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD]Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") --disable-maintainer-mode disable make rules and dependencies not useful (and sometimes confusing) to the casual installer --enable-shared[=PKGS] build shared libraries [default=yes] --enable-static[=PKGS] build static libraries [default=yes] --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build --disable-libtool-lock avoid locking (might break parallel builds) --enable-sse Enable SSE support --enable-neon Enable NEON support --enable-fixed-point Compile as fixed-point --disable-float-api Disable the floating-point API --disable-examples Do not build example programs, only the library --enable-arm4-asm Make use of ARM4 assembly optimizations --enable-arm5e-asm Make use of ARM5E assembly optimizations --enable-blackfin-asm Make use of Blackfin assembly optimizations --enable-fixed-point-debug Debug fixed-point implementation --enable-resample-full-sinc-table Resample full SINC table (no interpolation) --enable-ti-c55x Enable support for TI C55X DSPOptional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use both] --with-aix-soname=aix|svr4|both shared library versioning (aka "SONAME") variant to provide on AIX, [default=aix]. --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-sysroot[=DIR] Search for dependent libraries within DIR (or the compiler's sysroot if not specified). --with-fft=choice use an alternate FFT implementation. The available choices are kiss (default fixed point), smallft (default floating point), gpl-fftw3 and proprietary-intel-mklSome influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a nonstandard directory <lib dir> LIBS libraries to pass to the linker, e.g. -l<library> CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if you have headers in a nonstandard directory <include dir> LT_SYS_LIBRARY_PATH User-defined run-time library search path. CPP C preprocessor PKG_CONFIG path to pkg-config utility PKG_CONFIG_PATH directories to add to pkg-config's search path PKG_CONFIG_LIBDIR path overriding pkg-config's built-in search path FFT_CFLAGS C compiler flags for FFT, overriding pkg-config FFT_LIBS linker flags for FFT, overriding pkg-configUse these variables to override the choices made by `configure' or to helpit to find libraries and programs with nonstandard names/locations.Report bugs to <[email protected]>.
在下载到linux中的speexdsp中新建build目录
mkdir build
运行configure命令来生成Makefile。
./configure --prefix=/XXX/speexdsp/build -disable-sse
SSE是一个X86平台的指令集,所以要移植speexdsp到OpenHarmony过程,configure时要disable掉sse这个配置。否则在退出OpenHarmony编译体系后生成libspeexdsp_share.z.so和在ohos上执行的可执行文件编译过程中会报错。
在linux上生成speexdsp的so动态链接库和.a动态链接库
- make和make install后会生成speexdsp的.so动态链接库和.a动态链接库
makemake install
编译装置后build目录构造如下:
整个编译装置过程终端输入log如下:
[email protected]:~/Desktop/speexdsp-SpeexDSP-1.2.1$ ./autogen.shUpdating build configuration files, please wait....libtoolize: putting auxiliary files in '.'.libtoolize: copying file './ltmain.sh'libtoolize: putting macros in AC_CONFIG_MACRO_DIRS, 'm4'.libtoolize: copying file 'm4/libtool.m4'libtoolize: copying file 'm4/ltoptions.m4'libtoolize: copying file 'm4/ltsugar.m4'libtoolize: copying file 'm4/ltversion.m4'libtoolize: copying file 'm4/lt~obsolete.m4'configure.ac:26: installing './compile'configure.ac:24: installing './config.guess'configure.ac:24: installing './config.sub'configure.ac:21: installing './install-sh'configure.ac:21: installing './missing'libspeexdsp/Makefile.am: installing './depcomp'[email protected]:~/Desktop/speexdsp-SpeexDSP-1.2.1$ mkdir build[email protected]:~/Desktop/speexdsp-SpeexDSP-1.2.1$ ./configure --prefix=/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/build -disable-ssechecking whether make supports nested variables... yeschecking for a BSD-compatible install... /usr/bin/install -cchecking whether build environment is sane... yeschecking for a thread-safe mkdir -p... /usr/bin/mkdir -pchecking for gawk... nochecking for mawk... mawkchecking whether make sets $(MAKE)... yeschecking whether to enable maintainer-specific portions of Makefiles... yeschecking build system type... x86_64-pc-linux-gnuchecking host system type... x86_64-pc-linux-gnuchecking how to print strings... printfchecking whether make supports the include directive... yes (GNU style)checking for gcc... gccchecking whether the C compiler works... yeschecking for C compiler default output file name... a.outchecking for suffix of executables... checking whether we are cross compiling... nochecking for suffix of object files... ochecking whether we are using the GNU C compiler... yeschecking whether gcc accepts -g... yeschecking for gcc option to accept ISO C89... none neededchecking whether gcc understands -c and -o together... yeschecking dependency style of gcc... gcc3checking for a sed that does not truncate output... /usr/bin/sedchecking for grep that handles long lines and -e... /usr/bin/grepchecking for egrep... /usr/bin/grep -Echecking for fgrep... /usr/bin/grep -Fchecking for ld used by gcc... /usr/bin/ldchecking if the linker (/usr/bin/ld) is GNU ld... yeschecking for BSD- or MS-compatible name lister (nm)... /usr/bin/nm -Bchecking the name lister (/usr/bin/nm -B) interface... BSD nmchecking whether ln -s works... yeschecking the maximum length of command line arguments... 1572864checking how to convert x86_64-pc-linux-gnu file names to x86_64-pc-linux-gnu format... func_convert_file_noopchecking how to convert x86_64-pc-linux-gnu file names to toolchain format... func_convert_file_noopchecking for /usr/bin/ld option to reload object files... -rchecking for objdump... objdumpchecking how to recognize dependent libraries... pass_allchecking for dlltool... dlltoolchecking how to associate runtime and link libraries... printf %s\nchecking for ar... archecking for archiver @FILE support... @checking for strip... stripchecking for ranlib... ranlibchecking command to parse /usr/bin/nm -B output from gcc object... okchecking for sysroot... nochecking for a working dd... /usr/bin/ddchecking how to truncate binary pipes... /usr/bin/dd bs=4096 count=1checking for mt... mtchecking if mt is a manifest tool... nochecking how to run the C preprocessor... gcc -Echecking for ANSI C header files... yeschecking for sys/types.h... yeschecking for sys/stat.h... yeschecking for stdlib.h... yeschecking for string.h... yeschecking for memory.h... yeschecking for strings.h... yeschecking for inttypes.h... yeschecking for stdint.h... yeschecking for unistd.h... yeschecking for dlfcn.h... yeschecking for objdir... .libschecking if gcc supports -fno-rtti -fno-exceptions... nochecking for gcc option to produce PIC... -fPIC -DPICchecking if gcc PIC flag -fPIC -DPIC works... yeschecking if gcc static flag -static works... yeschecking if gcc supports -c -o file.o... yeschecking if gcc supports -c -o file.o... (cached) yeschecking whether the gcc linker (/usr/bin/ld -m elf_x86_64) supports shared libraries... yeschecking whether -lc should be explicitly linked in... nochecking dynamic linker characteristics... GNU/Linux ld.sochecking how to hardcode library paths into programs... immediatechecking whether stripping libraries is possible... yeschecking if libtool supports shared libraries... yeschecking whether to build shared libraries... yeschecking whether to build static libraries... yeschecking whether byte ordering is bigendian... nochecking for an ANSI C-conforming const... yeschecking for inline... inlinechecking for C/C++ restrict keyword... __restrictchecking for C99 variable-size arrays... yeschecking for SSE in current arch/CFLAGS... yeschecking for SSE2 in current arch/CFLAGS... yeschecking for NEON in current arch/CFLAGS... nochecking for ELF visibility... yeschecking sys/soundcard.h usability... yeschecking sys/soundcard.h presence... yeschecking for sys/soundcard.h... yeschecking sys/audioio.h usability... nochecking sys/audioio.h presence... nochecking for sys/audioio.h... nochecking for cos in -lm... yeschecking for pkg-config... /usr/bin/pkg-configchecking pkg-config is at least version 0.9.0... yeschecking size of int16_t... 2checking size of uint16_t... 2checking size of u_int16_t... 2checking size of int32_t... 4checking size of uint32_t... 4checking size of u_int32_t... 4checking size of short... 2checking size of int... 4checking size of long... 8checking that generated files are newer than configure... doneconfigure: creating ./config.statusconfig.status: creating Makefileconfig.status: creating libspeexdsp/Makefileconfig.status: creating doc/Makefileconfig.status: creating SpeexDSP.specconfig.status: creating include/Makefileconfig.status: creating include/speex/Makefileconfig.status: creating speexdsp.pcconfig.status: creating win32/Makefileconfig.status: creating win32/libspeexdsp/Makefileconfig.status: creating symbian/Makefileconfig.status: creating win32/VS2003/Makefileconfig.status: creating win32/VS2003/libspeexdsp/Makefileconfig.status: creating win32/VS2003/tests/Makefileconfig.status: creating win32/VS2005/Makefileconfig.status: creating win32/VS2005/libspeexdsp/Makefileconfig.status: creating win32/VS2005/tests/Makefileconfig.status: creating win32/VS2008/Makefileconfig.status: creating win32/VS2008/libspeexdsp/Makefileconfig.status: creating win32/VS2008/tests/Makefileconfig.status: creating include/speex/speexdsp_config_types.hconfig.status: creating ti/Makefileconfig.status: creating ti/speex_C54_test/Makefileconfig.status: creating ti/speex_C55_test/Makefileconfig.status: creating ti/speex_C64_test/Makefileconfig.status: creating config.hconfig.status: executing depfiles commandsconfig.status: executing libtool commandsType "make; make install" to compile and install Speex[email protected]:~/Desktop/speexdsp-SpeexDSP-1.2.1$ makemake all-recursivemake[1]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1”Making all in libspeexdspmake[2]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/libspeexdsp” CC preprocess.lo CC jitter.lo CC mdf.lo CC fftwrap.lo CC filterbank.lo CC resample.lo CC buffer.lo CC scal.lo CC smallft.lo CCLD libspeexdsp.lamake[2]: 来到目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/libspeexdsp”Making all in includemake[2]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/include”Making all in speexmake[3]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/include/speex”make[3]: 对“all”无需做任何事。make[3]: 来到目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/include/speex”make[3]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/include”make[3]: 对“all-am”无需做任何事。make[3]: 来到目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/include”make[2]: 来到目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/include”Making all in docmake[2]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/doc”make[2]: 对“all”无需做任何事。make[2]: 来到目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/doc”Making all in win32make[2]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32”Making all in libspeexdspmake[3]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32/libspeexdsp”make[3]: 对“all”无需做任何事。make[3]: 来到目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32/libspeexdsp”Making all in VS2003make[3]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32/VS2003”Making all in libspeexdspmake[4]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32/VS2003/libspeexdsp”make[4]: 对“all”无需做任何事。make[4]: 来到目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32/VS2003/libspeexdsp”Making all in testsmake[4]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32/VS2003/tests”make[4]: 对“all”无需做任何事。make[4]: 来到目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32/VS2003/tests”make[4]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32/VS2003”make[4]: 对“all-am”无需做任何事。make[4]: 来到目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32/VS2003”make[3]: 来到目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32/VS2003”Making all in VS2005make[3]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32/VS2005”Making all in libspeexdspmake[4]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32/VS2005/libspeexdsp”make[4]: 对“all”无需做任何事。make[4]: 来到目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32/VS2005/libspeexdsp”Making all in testsmake[4]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32/VS2005/tests”make[4]: 对“all”无需做任何事。make[4]: 来到目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32/VS2005/tests”make[4]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32/VS2005”make[4]: 对“all-am”无需做任何事。make[4]: 来到目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32/VS2005”make[3]: 来到目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32/VS2005”Making all in VS2008make[3]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32/VS2008”Making all in libspeexdspmake[4]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32/VS2008/libspeexdsp”make[4]: 对“all”无需做任何事。make[4]: 来到目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32/VS2008/libspeexdsp”Making all in testsmake[4]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32/VS2008/tests”make[4]: 对“all”无需做任何事。make[4]: 来到目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32/VS2008/tests”make[4]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32/VS2008”make[4]: 对“all-am”无需做任何事。make[4]: 来到目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32/VS2008”make[3]: 来到目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32/VS2008”make[3]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32”make[3]: 对“all-am”无需做任何事。make[3]: 来到目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32”make[2]: 来到目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32”Making all in symbianmake[2]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/symbian”make[2]: 对“all”无需做任何事。make[2]: 来到目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/symbian”Making all in timake[2]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/ti”Making all in speex_C54_testmake[3]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/ti/speex_C54_test”make[3]: 对“all”无需做任何事。make[3]: 来到目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/ti/speex_C54_test”Making all in speex_C55_testmake[3]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/ti/speex_C55_test”make[3]: 对“all”无需做任何事。make[3]: 来到目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/ti/speex_C55_test”Making all in speex_C64_testmake[3]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/ti/speex_C64_test”make[3]: 对“all”无需做任何事。make[3]: 来到目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/ti/speex_C64_test”make[3]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/ti”make[3]: 对“all-am”无需做任何事。make[3]: 来到目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/ti”make[2]: 来到目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/ti”make[2]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1”make[2]: 来到目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1”make[1]: 来到目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1”[email protected]:~/Desktop/speexdsp-SpeexDSP-1.2.1$ make installMaking install in libspeexdspmake[1]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/libspeexdsp”make[2]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/libspeexdsp” /usr/bin/mkdir -p '/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/build/lib' /bin/sh ../libtool --mode=install /usr/bin/install -c libspeexdsp.la '/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/build/lib'libtool: install: /usr/bin/install -c .libs/libspeexdsp.so.1.5.2 /home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/build/lib/libspeexdsp.so.1.5.2libtool: install: (cd /home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/build/lib && { ln -s -f libspeexdsp.so.1.5.2 libspeexdsp.so.1 || { rm -f libspeexdsp.so.1 && ln -s libspeexdsp.so.1.5.2 libspeexdsp.so.1; }; })libtool: install: (cd /home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/build/lib && { ln -s -f libspeexdsp.so.1.5.2 libspeexdsp.so || { rm -f libspeexdsp.so && ln -s libspeexdsp.so.1.5.2 libspeexdsp.so; }; })libtool: install: /usr/bin/install -c .libs/libspeexdsp.lai /home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/build/lib/libspeexdsp.lalibtool: install: /usr/bin/install -c .libs/libspeexdsp.a /home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/build/lib/libspeexdsp.alibtool: install: chmod 644 /home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/build/lib/libspeexdsp.alibtool: install: ranlib /home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/build/lib/libspeexdsp.alibtool: finish: PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin:/sbin" ldconfig -n /home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/build/lib----------------------------------------------------------------------Libraries have been installed in: /home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/build/libIf you ever happen to want to link against installed librariesin a given directory, LIBDIR, you must either use libtool, andspecify the full pathname of the library, or use the '-LLIBDIR'flag during linking and do at least one of the following: - add LIBDIR to the 'LD_LIBRARY_PATH' environment variable during execution - add LIBDIR to the 'LD_RUN_PATH' environment variable during linking - use the '-Wl,-rpath -Wl,LIBDIR' linker flag - have your system administrator add LIBDIR to '/etc/ld.so.conf'See any operating system documentation about shared libraries formore information, such as the ld(1) and ld.so(8) manual pages.----------------------------------------------------------------------make[2]: 对“install-data-am”无需做任何事。make[2]: 来到目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/libspeexdsp”make[1]: 来到目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/libspeexdsp”Making install in includemake[1]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/include”Making install in speexmake[2]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/include/speex”make[3]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/include/speex”make[3]: 对“install-exec-am”无需做任何事。 /usr/bin/mkdir -p '/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/build/include/speex' /usr/bin/install -c -m 644 speexdsp_config_types.h '/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/build/include/speex' /usr/bin/mkdir -p '/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/build/include/speex' /usr/bin/install -c -m 644 speex_echo.h speex_jitter.h speex_preprocess.h speex_resampler.h speexdsp_types.h '/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/build/include/speex'make[3]: 来到目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/include/speex”make[2]: 来到目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/include/speex”make[2]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/include”make[3]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/include”make[3]: 对“install-exec-am”无需做任何事。make[3]: 对“install-data-am”无需做任何事。make[3]: 来到目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/include”make[2]: 来到目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/include”make[1]: 来到目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/include”Making install in docmake[1]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/doc”make[2]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/doc”make[2]: 对“install-exec-am”无需做任何事。 /usr/bin/mkdir -p '/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/build/share/doc/speexdsp' /usr/bin/install -c -m 644 manual.pdf '/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/build/share/doc/speexdsp'make[2]: 来到目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/doc”make[1]: 来到目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/doc”Making install in win32make[1]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32”Making install in libspeexdspmake[2]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32/libspeexdsp”make[3]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32/libspeexdsp”make[3]: 对“install-exec-am”无需做任何事。make[3]: 对“install-data-am”无需做任何事。make[3]: 来到目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32/libspeexdsp”make[2]: 来到目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32/libspeexdsp”Making install in VS2003make[2]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32/VS2003”Making install in libspeexdspmake[3]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32/VS2003/libspeexdsp”make[4]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32/VS2003/libspeexdsp”make[4]: 对“install-exec-am”无需做任何事。make[4]: 对“install-data-am”无需做任何事。make[4]: 来到目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32/VS2003/libspeexdsp”make[3]: 来到目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32/VS2003/libspeexdsp”Making install in testsmake[3]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32/VS2003/tests”make[4]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32/VS2003/tests”make[4]: 对“install-exec-am”无需做任何事。make[4]: 对“install-data-am”无需做任何事。make[4]: 来到目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32/VS2003/tests”make[3]: 来到目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32/VS2003/tests”make[3]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32/VS2003”make[4]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32/VS2003”make[4]: 对“install-exec-am”无需做任何事。make[4]: 对“install-data-am”无需做任何事。make[4]: 来到目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32/VS2003”make[3]: 来到目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32/VS2003”make[2]: 来到目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32/VS2003”Making install in VS2005make[2]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32/VS2005”Making install in libspeexdspmake[3]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32/VS2005/libspeexdsp”make[4]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32/VS2005/libspeexdsp”make[4]: 对“install-exec-am”无需做任何事。make[4]: 对“install-data-am”无需做任何事。make[4]: 来到目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32/VS2005/libspeexdsp”make[3]: 来到目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32/VS2005/libspeexdsp”Making install in testsmake[3]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32/VS2005/tests”make[4]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32/VS2005/tests”make[4]: 对“install-exec-am”无需做任何事。make[4]: 对“install-data-am”无需做任何事。make[4]: 来到目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32/VS2005/tests”make[3]: 来到目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32/VS2005/tests”make[3]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32/VS2005”make[4]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32/VS2005”make[4]: 对“install-exec-am”无需做任何事。make[4]: 对“install-data-am”无需做任何事。make[4]: 来到目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32/VS2005”make[3]: 来到目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32/VS2005”make[2]: 来到目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32/VS2005”Making install in VS2008make[2]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32/VS2008”Making install in libspeexdspmake[3]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32/VS2008/libspeexdsp”make[4]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32/VS2008/libspeexdsp”make[4]: 对“install-exec-am”无需做任何事。make[4]: 对“install-data-am”无需做任何事。make[4]: 来到目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32/VS2008/libspeexdsp”make[3]: 来到目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32/VS2008/libspeexdsp”Making install in testsmake[3]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32/VS2008/tests”make[4]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32/VS2008/tests”make[4]: 对“install-exec-am”无需做任何事。make[4]: 对“install-data-am”无需做任何事。make[4]: 来到目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32/VS2008/tests”make[3]: 来到目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32/VS2008/tests”make[3]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32/VS2008”make[4]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32/VS2008”make[4]: 对“install-exec-am”无需做任何事。make[4]: 对“install-data-am”无需做任何事。make[4]: 来到目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32/VS2008”make[3]: 来到目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32/VS2008”make[2]: 来到目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32/VS2008”make[2]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32”make[3]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32”make[3]: 对“install-exec-am”无需做任何事。make[3]: 对“install-data-am”无需做任何事。make[3]: 来到目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32”make[2]: 来到目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32”make[1]: 来到目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32”Making install in symbianmake[1]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/symbian”make[2]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/symbian”make[2]: 对“install-exec-am”无需做任何事。make[2]: 对“install-data-am”无需做任何事。make[2]: 来到目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/symbian”make[1]: 来到目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/symbian”Making install in timake[1]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/ti”Making install in speex_C54_testmake[2]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/ti/speex_C54_test”make[3]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/ti/speex_C54_test”make[3]: 对“install-exec-am”无需做任何事。make[3]: 对“install-data-am”无需做任何事。make[3]: 来到目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/ti/speex_C54_test”make[2]: 来到目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/ti/speex_C54_test”Making install in speex_C55_testmake[2]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/ti/speex_C55_test”make[3]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/ti/speex_C55_test”make[3]: 对“install-exec-am”无需做任何事。make[3]: 对“install-data-am”无需做任何事。make[3]: 来到目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/ti/speex_C55_test”make[2]: 来到目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/ti/speex_C55_test”Making install in speex_C64_testmake[2]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/ti/speex_C64_test”make[3]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/ti/speex_C64_test”make[3]: 对“install-exec-am”无需做任何事。make[3]: 对“install-data-am”无需做任何事。make[3]: 来到目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/ti/speex_C64_test”make[2]: 来到目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/ti/speex_C64_test”make[2]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/ti”make[3]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/ti”make[3]: 对“install-exec-am”无需做任何事。make[3]: 对“install-data-am”无需做任何事。make[3]: 来到目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/ti”make[2]: 来到目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/ti”make[1]: 来到目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/ti”make[1]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1”make[2]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1”make[2]: 对“install-exec-am”无需做任何事。 /usr/bin/mkdir -p '/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/build/lib/pkgconfig' /usr/bin/install -c -m 644 speexdsp.pc '/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/build/lib/pkgconfig'make[2]: 来到目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1”make[1]: 来到目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1”
生成在linux上测试speexdsp性能用的可执行文件
编译生成出在linux上测试speexdsp性能用的可执行文件,目标是为了剖析speexdsp在ohos编译体系生成动态链接库后进功能测试的逻辑。
浏览speexdsp用户手册,测试speexdsp性能的源文件别离为:
- testdenoise.c
- testecho.c
- testjitter.c
- testresample.c
- testresample2.c
它们均位于speexdsp下的libspeexdsp。
须要把它们编译为可运行的执行文件,通过浏览用户手册能够晓得在编译时须要增加-lspeexdsp和-lm
以编译testresample可执行文件为例,编译执行语句如下:
在speexdsp目录libspeexdsp目录下关上终端输出如下语句
gcc testjitter.c -L /home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/build/lib -lspeexdsp -o testjitter -I /home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/include -lm
- 其中/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1为笔者搁置speexdsp原生库linux下的绝对路径。
- 链接动态链接库编译可执行文件,gcc前面是测试用的源文件。-L 后指定so库所在的文件夹,-l+so库的名字(进来lib和后缀)。-o 前面是可执行文件的名字,-I 前面是测试用的源文件要用到的头文件所在的地址。
编译出全副测试性能用的可执行文件如下: