php 调用speex解码库,怎么增加speex解码库
恩,我参照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
php 调用speex解码库,怎么增加speex解码库相关推荐
- linux添加自己的库,Linux学习笔记——例叙makefile 增加自定义共享库
Linux学习笔记--例说makefile 增加自定义共享库 0.前言 从学习C语言开始就慢慢开始接触makefile,查阅了很多的makefile的资料但总感觉没有真正掌握makefile,如果自己 ...
- cmake使用教程(五)调用opencv外部库和自己生成的库
这一节是我真正使用时遇到的,就是我需要构建动态库,但是这个动态库依赖外部的一些库如opencv.matlab等,那么若何构建这样的动态库呢?构建好如何测试呢?本篇将详细介绍其过程: 1.ubuntu安 ...
- ZIZI - A3 再自己的“库”中增加体现丰富意象的“线条”
文章目录 1 设计思路 2 情绪线条设计 2.1 从安静到兴奋 2.2 浪漫---You are my angel. 2.3 焦虑的线 2.4 愤怒的线 2.5 悲伤的圆 3 创作出体现丰富意象感受的 ...
- c#脚本实现-CS-ScriP,支持脚本调用第三方dll文件,增加程序框架的强壮性
背景:最近想提升下测试设备的方面的能力,yan测试设备的软件平台,前期朋友C#开发的,所有背景: 最近想提升下测试设备方面的知识及能力,研究下测试平台软件的开发,为了增加软件可扩展的强壮性,脚本是不错 ...
- C++ 调用lib 和 dll的 方法 及 动态库DLL与静态库lib的区别
C++ 调用.lib的方法: 一: 隐式的加载时链接,有三种方法 1 LIB文件直接加入到工程文件列表中 在VC中打开File View一页,选中工程名,单击鼠标右键,然后选中"Add F ...
- 【走过巨坑】android studio对于jni调用及运行闪退无法加载库的问题解决方案
[走过巨坑]android studio对于jni调用及运行闪退无法加载库的问题解决方案 参考文章: (1)[走过巨坑]android studio对于jni调用及运行闪退无法加载库的问题解决方案 ( ...
- 【C 语言】动态库封装与设计 ( 动态库调用环境搭建 | 创建应用 | 拷贝动态库相关文件到源码路径 | 导入头文件 | 配置动态库引用 | 调用动态库中的函数 )
文章目录 一.在 Visual Studio 2019 中创建 " 控制台应用 " 程序 二.拷贝 xxx.lib.xxx.dll.xxx.h 到源码路径 三.导入 xxx.h 头 ...
- Python编程语言学习:在根目录的py文件内调用某叶目录文件内的包/库或者函数(常用在GUI编程)之详细攻略
Python编程语言学习:在根目录的py文件内调用某叶目录文件内的包/库或者函数(常用在GUI编程)之详细攻略 目录
- Python与C之间的相互调用(Python C API及Python ctypes库)
2010-01-24 17:58 14237人阅读 评论(11) 收藏 举报 目录(?)[-] Python C API 准备工作: C中内嵌Python 获取返回值 利用C扩展Python Pyth ...
- python如何封装成可调用的库_Python实现打包成库供别的模块调用
1.创建python项目bricewulib 2.新建test_package包并创建info1类以及print_hello方法 3.为了让包的结构再复杂点,我们再在test_package下面新建一 ...
最新文章
- 秦川团队《科学》刊发研究:新冠感染恒河猴康复后不会再感染
- php实现 简单密码(代码颜色变化)
- 查看SAP CRM和C4C的UI technical信息
- java 8时间操作_Java8 时间日期类操作
- js reduce实现中间件_js数组高阶方法reduce经典用法代码分享
- unicode字符大全可复制_说说Excel不可见字符的那些事
- 多重索引DataFrame插入数据的方法探索
- PHP probuf详细步骤_【转】protobuffer php使用
- 用于UML前端展示的jsuml2插件
- kafka--Struct Streaming--mysql案例
- Java使用POI导出Excel
- Win7 64位系统下Auto CAD 2010注册激活,出现警告:Make sure you can write to current directory...
- 腾讯云即时通讯IM前端使用步骤简述
- 毫米波雷达测距/测速原理介绍_小七自学笔记
- photoshop cc 2018破解补丁(pscc2018注册机) 附使用方法
- 升级mac系统正在计算机,USB对拷线在苹果Mac系统的升级说明
- 报表控件Stimulsoft报告中的数据矩阵条形码介绍
- RDIFramework.NET 框架之组织机构权限设置
- mcnpf5输出结果_MCNP使用教程
- Heavy Transportation(Dijkstra算法)