当前位置: 首页 > 工具软件 > Speex > 使用案例 >

php 调用speex解码库,怎么增加speex解码库

祁远
2023-12-01

恩,我参照openssl写了一个脚本,现在speex编译成功,在build/output目录下生成了include,lib,

然后参照openssl把对应的头文件和库文件添加进来,但是编译的时候会报如下错误,

[*] link ffmpeg

-Wl,--fix-cortex-a8

libavcodec/libspeexdec.c:146: error: undefined reference to 'speex_bits_remaining'

libavcodec/libspeexdec.c:156: error: undefined reference to 'speex_bits_read_from'

libavcodec/libspeexdec.c:161: error: undefined reference to 'speex_decode_int'

libavcodec/libspeexdec.c:147: error: undefined reference to 'speex_bits_peek_unsigned'

libavcodec/libspeexdec.c:172: error: undefined reference to 'speex_decoder_ctl'

libavcodec/libspeexdec.c:167: error: undefined reference to 'speex_decode_stereo_int'

libavcodec/libspeexdec.c:180: error: undefined reference to 'speex_bits_destroy'

libavcodec/libspeexdec.c:181: error: undefined reference to 'speex_decoder_destroy'

libavcodec/libspeexdec.c:48: error: undefined reference to 'speex_packet_to_header'

libavcodec/libspeexdec.c:73: error: undefined reference to 'speex_header_free'

libavcodec/libspeexdec.c:88: error: undefined reference to 'speex_lib_get_mode'

libavcodec/libspeexdec.c:106: error: undefined reference to 'speex_bits_init'

libavcodec/libspeexdec.c:107: error: undefined reference to 'speex_decoder_init'

libavcodec/libspeexdec.c:119: error: undefined reference to 'speex_decoder_ctl'

libavcodec/libspeexdec.c:123: error: undefined reference to 'speex_nb_mode'

libavcodec/libspeexdec.c:123: error: undefined reference to 'speex_std_stereo_request_handler'

libavcodec/libspeexdec.c:189: error: undefined reference to 'speex_bits_reset'

collect2: error: ld returned 1 exit status

我改的do-compile-ffmpeg.sh的脚本如下,现在只是编了armv7a一个架构,请问一下哪些地方还需要改的?谢谢了!

FF_BUILD_ROOT=pwd

FF_ANDROID_PLATFORM=android-9

FF_GCC_VER=4.8

FF_GCC_64_VER=4.9

FF_BUILD_NAME=

FF_SOURCE=

FF_CROSS_PREFIX=

FF_DEP_OPENSSL_INC=

FF_DEP_OPENSSL_LIB=

FF_DEP_SPEEX_INC=

FF_DEP_SPEEX_LIB=

FF_CFG_FLAGS=

FF_EXTRA_CFLAGS=

FF_EXTRA_LDFLAGS=

FF_DEP_LIBS=

FF_ASM_OBJ_DIR=

#--------------------

echo ""

echo "--------------------"

echo "[] make NDK standalone toolchain"

echo "--------------------"

FF_MAKE_TOOLCHAIN_FLAGS=

case "$UNAME_S" in

Darwin)

FF_MAKE_TOOLCHAIN_FLAGS="$FF_MAKE_TOOLCHAIN_FLAGS --system=darwin-x86_64"

;;

CYGWIN_NT-)

FF_MAKE_TOOLCHAIN_FLAGS="$FF_MAKE_TOOLCHAIN_FLAGS --system=windows-x86_64"

FF_WIN_TEMP="$(cygpath -am /tmp)"

export TEMPDIR=$FF_WIN_TEMP/

echo "Cygwin temp prefix=$FF_WIN_TEMP/"

#FF_CFG_FLAGS="$FF_CFG_FLAGS --tempprefix=$FF_WIN_TEMP/"

;;

esac

#----- armv7a begin -----

if [ "$FF_ARCH" = "armv7a" ]; then

FF_BUILD_NAME=ffmpeg-armv7a

FF_BUILD_NAME_OPENSSL=openssl-armv7a

FF_BUILD_NAME_SPEEX=speex-armv7a

FF_SOURCE=$FF_BUILD_ROOT/$FF_BUILD_NAME

FF_CROSS_PREFIX=arm-linux-androideabi

FF_TOOLCHAIN_NAME=${FF_CROSS_PREFIX}-${FF_GCC_VER}

FF_CFG_FLAGS="$FF_CFG_FLAGS --arch=arm --cpu=cortex-a8"

FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-neon"

FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-thumb"

FF_EXTRA_CFLAGS="$FF_EXTRA_CFLAGS -march=armv7-a -mcpu=cortex-a8 -mfpu=vfpv3-d16 -mfloat-abi=softfp -mthumb"

FF_EXTRA_LDFLAGS="$FF_EXTRA_LDFLAGS -Wl,--fix-cortex-a8"

FF_ASM_OBJ_DIR="libavutil/arm/*.o libavcodec/arm/*.o libswresample/arm/*.o"

elif [ "$FF_ARCH" = "armv5" ]; then

FF_BUILD_NAME=ffmpeg-armv5

FF_BUILD_NAME_OPENSSL=openssl-armv5

FF_SOURCE=$FF_BUILD_ROOT/$FF_BUILD_NAME

FF_CROSS_PREFIX=arm-linux-androideabi

FF_TOOLCHAIN_NAME=${FF_CROSS_PREFIX}-${FF_GCC_VER}

FF_CFG_FLAGS="$FF_CFG_FLAGS --arch=arm"

FF_EXTRA_CFLAGS="$FF_EXTRA_CFLAGS -march=armv5te -mtune=arm9tdmi -msoft-float"

FF_EXTRA_LDFLAGS="$FF_EXTRA_LDFLAGS"

FF_ASM_OBJ_DIR="libavutil/arm/*.o libavcodec/arm/*.o libswresample/arm/*.o"

elif [ "$FF_ARCH" = "x86" ]; then

FF_BUILD_NAME=ffmpeg-x86

FF_BUILD_NAME_OPENSSL=openssl-x86

FF_SOURCE=$FF_BUILD_ROOT/$FF_BUILD_NAME

FF_CROSS_PREFIX=i686-linux-android

FF_TOOLCHAIN_NAME=x86-${FF_GCC_VER}

FF_CFG_FLAGS="$FF_CFG_FLAGS --arch=x86 --cpu=i686 --enable-yasm"

FF_EXTRA_CFLAGS="$FF_EXTRA_CFLAGS -march=atom -msse3 -ffast-math -mfpmath=sse"

FF_EXTRA_LDFLAGS="$FF_EXTRA_LDFLAGS"

FF_ASM_OBJ_DIR="libavutil/x86/*.o libavcodec/x86/*.o libswresample/x86/*.o libswscale/x86/*.o"

elif [ "$FF_ARCH" = "arm64" ]; then

FF_ANDROID_PLATFORM=android-21

FF_BUILD_NAME=ffmpeg-arm64

FF_BUILD_NAME_OPENSSL=openssl-arm64

FF_SOURCE=$FF_BUILD_ROOT/$FF_BUILD_NAME

FF_CROSS_PREFIX=aarch64-linux-android

FF_TOOLCHAIN_NAME=${FF_CROSS_PREFIX}-${FF_GCC_64_VER}

FF_CFG_FLAGS="$FF_CFG_FLAGS --arch=aarch64 --enable-yasm"

FF_EXTRA_CFLAGS="$FF_EXTRA_CFLAGS"

FF_EXTRA_LDFLAGS="$FF_EXTRA_LDFLAGS"

FF_ASM_OBJ_DIR="libavutil/aarch64/*.o libavcodec/aarch64/*.o libswresample/aarch64/*.o libavcodec/neon/*.o"

else

echo "unknown architecture $FF_ARCH";

exit 1

fi

FF_TOOLCHAIN_PATH=$FF_BUILD_ROOT/build/$FF_BUILD_NAME/toolchain

FF_MAKE_TOOLCHAIN_FLAGS="$FF_MAKE_TOOLCHAIN_FLAGS --install-dir=$FF_TOOLCHAIN_PATH"

FF_SYSROOT=$FF_TOOLCHAIN_PATH/sysroot

FF_PREFIX=$FF_BUILD_ROOT/build/$FF_BUILD_NAME/output

FF_DEP_OPENSSL_INC=$FF_BUILD_ROOT/build/$FF_BUILD_NAME_OPENSSL/output/include

FF_DEP_OPENSSL_LIB=$FF_BUILD_ROOT/build/$FF_BUILD_NAME_OPENSSL/output/lib

FF_DEP_SPEEX_INC=$FF_BUILD_ROOT/build/$FF_BUILD_NAME_SPEEX/output/include

FF_DEP_SPEEX_LIB=$FF_BUILD_ROOT/build/$FF_BUILD_NAME_SPEEX/output/lib

case "$UNAME_S" in

CYGWIN_NT-*)

FF_SYSROOT="$(cygpath -am $FF_SYSROOT)"

FF_PREFIX="$(cygpath -am $FF_PREFIX)"

;;

esac

mkdir -p $FF_PREFIX

mkdir -p $FF_SYSROOT

FF_MAKEFLAGS=

if which nproc >/dev/null

then

FF_MAKEFLAGS=-jnproc

elif [ "$UNAMES" = "Darwin" ] && which sysctl >/dev/null

then

FF_MAKEFLAGS=-jsysctl -n machdep.cpu.thread_count

fi

FF_TOOLCHAIN_TOUCH="$FF_TOOLCHAIN_PATH/touch"

if [ ! -f "$FF_TOOLCHAIN_TOUCH" ]; then

$ANDROID_NDK/build/tools/make-standalone-toolchain.sh

$FF_MAKE_TOOLCHAIN_FLAGS

--platform=$FF_ANDROID_PLATFORM

--toolchain=$FF_TOOLCHAIN_NAME

touch $FF_TOOLCHAIN_TOUCH;

fi

#--------------------

echo ""

echo "--------------------"

echo "[*] check ffmpeg env"

echo "--------------------"

export PATH=$FF_TOOLCHAIN_PATH/bin/:$PATH

#export CC="ccache ${FF_CROSS_PREFIX}-gcc"

export CC="${FF_CROSS_PREFIX}-gcc"

export LD=${FF_CROSS_PREFIX}-ld

export AR=${FF_CROSS_PREFIX}-ar

export STRIP=${FF_CROSS_PREFIX}-strip

FF_CFLAGS="-O3 -Wall -pipe

-std=c99

-ffast-math

-fstrict-aliasing -Werror=strict-aliasing

-Wno-psabi -Wa,--noexecstack

-DANDROID -DNDEBUG"

cause av_strlcpy crash with gcc4.7, gcc4.8

-fmodulo-sched -fmodulo-sched-allow-regmoves

--enable-thumb is OK

#FF_CFLAGS="$FF_CFLAGS -mthumb"

not necessary

#FF_CFLAGS="$FF_CFLAGS -finline-limit=300"

export COMMON_FF_CFG_FLAGS=

. $FF_BUILD_ROOT/../../config/module.sh

#--------------------

with openssl

if [ -f "${FF_DEP_OPENSSL_LIB}/libssl.a" ]; then

FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-nonfree"

FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-openssl"

FF_CFLAGS="$FF_CFLAGS -I${FF_DEP_OPENSSL_INC}"

FF_DEP_LIBS="-L${FF_DEP_OPENSSL_LIB} -lssl -lcrypto"

fi

#--------------------

with speex

if [ -f "${FF_DEP_SPEEX_LIB}/libspeex.a" ]; then

FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-nonfree"

FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-libspeex"

echo "------------- find speex -----------"

echo $FF_DEP_SPEEX_INC

echo $FF_DEP_SPEEX_LIB

echo "------------------------------------"

FF_CFLAGS="$FF_CFLAGS -I${FF_DEP_SPEEX_INC}"

FF_DEP_LIBS="-L${FF_DEP_SPEEX_LIB}"

fi

FF_CFG_FLAGS="$FF_CFG_FLAGS $COMMON_FF_CFG_FLAGS"

#--------------------

Standard options:

FF_CFG_FLAGS="$FF_CFG_FLAGS --prefix=$FF_PREFIX"

Advanced options (experts only):

FF_CFG_FLAGS="$FF_CFG_FLAGS --cross-prefix=${FF_CROSS_PREFIX}-"

FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-cross-compile"

FF_CFG_FLAGS="$FF_CFG_FLAGS --target-os=linux"

FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-pic"

FF_CFG_FLAGS="$FF_CFG_FLAGS --disable-symver"

Optimization options (experts only):

FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-asm"

FF_CFG_FLAGS="$FF_CFG_FLAGS --enable-inline-asm"

#--------------------

echo ""

echo "--------------------"

echo "[*] configurate ffmpeg"

echo "--------------------"

cd $FF_SOURCE

if [ -f "./config.h" ]; then

echo 'reuse configure'

else

which $CC

./configure $FF_CFG_FLAGS

--extra-libs=-lgcc

--extra-cflags="$FF_CFLAGS $FF_EXTRA_CFLAGS"

--extra-ldflags="$FF_DEP_LIBS $FF_EXTRA_LDFLAGS"

make clean

fi

#--------------------

echo ""

echo "--------------------"

echo "[] compile ffmpeg"

echo "--------------------"

cp config. $FF_PREFIX

make $FF_MAKEFLAGS

make install

#--------------------

echo ""

echo "--------------------"

echo "[] link ffmpeg"

echo "--------------------"

echo $FF_EXTRA_LDFLAGS

$CC -lm -lz -shared --sysroot=$FF_SYSROOT -Wl,--no-undefined -Wl,-z,noexecstack $FF_EXTRA_LDFLAGS

-Wl,-soname,libnelpengine.so

compat/.o

libavutil/.o

libavcodec/.o

libavformat/.o

libswresample/.o

libswscale/*.o

$FF_ASM_OBJ_DIR

$FF_DEP_LIBS

-o $FF_PREFIX/libnelpengine.so

mysedi() {

f=$1

exp=$2

n=basename $f

cp $f /tmp/$n

sed $exp /tmp/$n > $f

rm /tmp/$n

}

echo ""

echo "--------------------"

echo "[] create files for shared ffmpeg"

echo "--------------------"

rm -rf $FF_PREFIX/shared

mkdir -p $FF_PREFIX/shared/lib/pkgconfig

ln -s $FF_PREFIX/include $FF_PREFIX/shared/include

ln -s $FF_PREFIX/libnelpengine.so $FF_PREFIX/shared/lib/libnelpengine.so

cp $FF_PREFIX/lib/pkgconfig/.pc $FF_PREFIX/shared/lib/pkgconfig

for f in $FF_PREFIX/lib/pkgconfig/*.pc; do

# in case empty dir

if [ ! -f $f ]; then

continue

fi

cp $f $FF_PREFIX/shared/lib/pkgconfig

f=$FF_PREFIX/shared/lib/pkgconfig/basename $f

# OSX sed doesn't have in-place(-i)

mysedi $f 's//output//output/shared/g'

mysedi $f 's/-lavcodec/-lnelpengine/g'

mysedi $f 's/-lavformat/-lnelpengine/g'

mysedi $f 's/-lavutil/-lnelpengine/g'

mysedi $f 's/-lswresample/-lnelpengine/g'

mysedi $f 's/-lswscale/-lnelpengine/g'

done

 类似资料: