乐趣区

关于openharmony:啃论文俱乐部移植speexdsp到OpenHarmony标准系统①

  • 大家好!我来自南京,在 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 工程的构建中。

三方库移植的次要开发步骤如下:

  1. 在规范 Linux 零碎下载三方库源码,搭建开发环境,编译整个源码工程;
  2. 剖析在规范 Linux 零碎的编译过程文件,提取编译须要的源文件、编译依赖等信息;
  3. 依据上一步剖析后果,编写 gn 文件,将三方库退出到 OpenHarmony 的编译体系;
  4. 验证编译后果,在 OpenHarmony 的 out 目录是否生成指标库;
  5. 测试 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 as
VAR=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 specify
an 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 names

System 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 DSP

Optional 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-mkl

Some 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-config

Use these variables to override the choices made by `configure' or to help
it 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 动态链接库
make
make install

编译装置后 build 目录构造如下:

整个编译装置过程终端输入 log 如下:

[email protected]:~/Desktop/speexdsp-SpeexDSP-1.2.1$ ./autogen.sh
Updating 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-sse
checking whether make supports nested variables... yes
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /usr/bin/mkdir -p
checking for gawk... no
checking for mawk... mawk
checking whether make sets $(MAKE)... yes
checking whether to enable maintainer-specific portions of Makefiles... yes
checking build system type... x86_64-pc-linux-gnu
checking host system type... x86_64-pc-linux-gnu
checking how to print strings... printf
checking whether make supports the include directive... yes (GNU style)
checking for gcc... gcc
checking whether the C compiler works... yes
checking for C compiler default output file name... a.out
checking for suffix of executables... 
checking whether we are cross compiling... no
checking for suffix of object files... o
checking whether we are using the GNU C compiler... yes
checking whether gcc accepts -g... yes
checking for gcc option to accept ISO C89... none needed
checking whether gcc understands -c and -o together... yes
checking dependency style of gcc... gcc3
checking for a sed that does not truncate output... /usr/bin/sed
checking for grep that handles long lines and -e... /usr/bin/grep
checking for egrep... /usr/bin/grep -E
checking for fgrep... /usr/bin/grep -F
checking for ld used by gcc... /usr/bin/ld
checking if the linker (/usr/bin/ld) is GNU ld... yes
checking for BSD- or MS-compatible name lister (nm)... /usr/bin/nm -B
checking the name lister (/usr/bin/nm -B) interface... BSD nm
checking whether ln -s works... yes
checking the maximum length of command line arguments... 1572864
checking how to convert x86_64-pc-linux-gnu file names to x86_64-pc-linux-gnu format... func_convert_file_noop
checking how to convert x86_64-pc-linux-gnu file names to toolchain format... func_convert_file_noop
checking for /usr/bin/ld option to reload object files... -r
checking for objdump... objdump
checking how to recognize dependent libraries... pass_all
checking for dlltool... dlltool
checking how to associate runtime and link libraries... printf %s\n
checking for ar... ar
checking for archiver @FILE support... @
checking for strip... strip
checking for ranlib... ranlib
checking command to parse /usr/bin/nm -B output from gcc object... ok
checking for sysroot... no
checking for a working dd... /usr/bin/dd
checking how to truncate binary pipes... /usr/bin/dd bs=4096 count=1
checking for mt... mt
checking if mt is a manifest tool... no
checking how to run the C preprocessor... gcc -E
checking for ANSI C header files... yes
checking for sys/types.h... yes
checking for sys/stat.h... yes
checking for stdlib.h... yes
checking for string.h... yes
checking for memory.h... yes
checking for strings.h... yes
checking for inttypes.h... yes
checking for stdint.h... yes
checking for unistd.h... yes
checking for dlfcn.h... yes
checking for objdir... .libs
checking if gcc supports -fno-rtti -fno-exceptions... no
checking for gcc option to produce PIC... -fPIC -DPIC
checking if gcc PIC flag -fPIC -DPIC works... yes
checking if gcc static flag -static works... yes
checking if gcc supports -c -o file.o... yes
checking if gcc supports -c -o file.o... (cached) yes
checking whether the gcc linker (/usr/bin/ld -m elf_x86_64) supports shared libraries... yes
checking whether -lc should be explicitly linked in... no
checking dynamic linker characteristics... GNU/Linux ld.so
checking how to hardcode library paths into programs... immediate
checking whether stripping libraries is possible... yes
checking if libtool supports shared libraries... yes
checking whether to build shared libraries... yes
checking whether to build static libraries... yes
checking whether byte ordering is bigendian... no
checking for an ANSI C-conforming const... yes
checking for inline... inline
checking for C/C++ restrict keyword... __restrict
checking for C99 variable-size arrays... yes
checking for SSE in current arch/CFLAGS... yes
checking for SSE2 in current arch/CFLAGS... yes
checking for NEON in current arch/CFLAGS... no
checking for ELF visibility... yes
checking sys/soundcard.h usability... yes
checking sys/soundcard.h presence... yes
checking for sys/soundcard.h... yes
checking sys/audioio.h usability... no
checking sys/audioio.h presence... no
checking for sys/audioio.h... no
checking for cos in -lm... yes
checking for pkg-config... /usr/bin/pkg-config
checking pkg-config is at least version 0.9.0... yes
checking size of int16_t... 2
checking size of uint16_t... 2
checking size of u_int16_t... 2
checking size of int32_t... 4
checking size of uint32_t... 4
checking size of u_int32_t... 4
checking size of short... 2
checking size of int... 4
checking size of long... 8
checking that generated files are newer than configure... done
configure: creating ./config.status
config.status: creating Makefile
config.status: creating libspeexdsp/Makefile
config.status: creating doc/Makefile
config.status: creating SpeexDSP.spec
config.status: creating include/Makefile
config.status: creating include/speex/Makefile
config.status: creating speexdsp.pc
config.status: creating win32/Makefile
config.status: creating win32/libspeexdsp/Makefile
config.status: creating symbian/Makefile
config.status: creating win32/VS2003/Makefile
config.status: creating win32/VS2003/libspeexdsp/Makefile
config.status: creating win32/VS2003/tests/Makefile
config.status: creating win32/VS2005/Makefile
config.status: creating win32/VS2005/libspeexdsp/Makefile
config.status: creating win32/VS2005/tests/Makefile
config.status: creating win32/VS2008/Makefile
config.status: creating win32/VS2008/libspeexdsp/Makefile
config.status: creating win32/VS2008/tests/Makefile
config.status: creating include/speex/speexdsp_config_types.h
config.status: creating ti/Makefile
config.status: creating ti/speex_C54_test/Makefile
config.status: creating ti/speex_C55_test/Makefile
config.status: creating ti/speex_C64_test/Makefile
config.status: creating config.h
config.status: executing depfiles commands
config.status: executing libtool commands
Type "make; make install" to compile and install Speex
[email protected]:~/Desktop/speexdsp-SpeexDSP-1.2.1$ make
make  all-recursive
make[1]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1”Making all in libspeexdsp
make[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.la
make[2]: 来到目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/libspeexdsp”Making all in include
make[2]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/include”Making all in speex
make[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 doc
make[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 win32
make[2]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32”Making all in libspeexdsp
make[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 VS2003
make[3]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32/VS2003”Making all in libspeexdsp
make[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 tests
make[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 VS2005
make[3]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32/VS2005”Making all in libspeexdsp
make[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 tests
make[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 VS2008
make[3]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32/VS2008”Making all in libspeexdsp
make[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 tests
make[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 symbian
make[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 ti
make[2]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/ti”Making all in speex_C54_test
make[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_test
make[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_test
make[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 install
Making install in libspeexdsp
make[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.2
libtool: 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.la
libtool: install: /usr/bin/install -c .libs/libspeexdsp.a /home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/build/lib/libspeexdsp.a
libtool: install: chmod 644 /home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/build/lib/libspeexdsp.a
libtool: install: ranlib /home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/build/lib/libspeexdsp.a
libtool: 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/lib

If you ever happen to want to link against installed libraries
in a given directory, LIBDIR, you must either use libtool, and
specify 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 for
more 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 include
make[1]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/include”Making install in speex
make[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 doc
make[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 win32
make[1]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32”Making install in libspeexdsp
make[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 VS2003
make[2]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32/VS2003”Making install in libspeexdsp
make[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 tests
make[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 VS2005
make[2]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32/VS2005”Making install in libspeexdsp
make[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 tests
make[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 VS2008
make[2]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/win32/VS2008”Making install in libspeexdsp
make[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 tests
make[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 symbian
make[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 ti
make[1]: 进入目录“/home/jiajiahao/Desktop/speexdsp-SpeexDSP-1.2.1/ti”Making install in speex_C54_test
make[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_test
make[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_test
make[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 前面是测试用的源文件要用到的头文件所在的地址。

编译出全副测试性能用的可执行文件如下:

退出移动版