Gcc 当--sysroot指向另一个目录时,如何让FFmpeg找到已安装的库?
我已经做了好几天了。我正在尝试用libmp3lame构建FFmpeg,以便在Android应用程序中使用。构建脚本设置一个Gcc 当--sysroot指向另一个目录时,如何让FFmpeg找到已安装的库?,gcc,build,ffmpeg,android-ndk,sh,Gcc,Build,Ffmpeg,Android Ndk,Sh,我已经做了好几天了。我正在尝试用libmp3lame构建FFmpeg,以便在Android应用程序中使用。构建脚本设置一个--sysroot标志,该标志指向以Android可以使用的方式构建这些库所需的Android NDK目录 当我将标志添加到--enable-libmp3lame时,问题就出现了;在构建启动期间,我发现错误:libmp3lame>=3.98.3未找到。我知道已经安装了LAME及其库,因为我可以手动运行/configure--enable-libmp3lame,配置将顺利启动,
--sysroot
标志,该标志指向以Android可以使用的方式构建这些库所需的Android NDK目录
当我将标志添加到--enable-libmp3lame
时,问题就出现了;在构建启动期间,我发现错误:libmp3lame>=3.98.3未找到。我知道已经安装了LAME及其库,因为我可以手动运行/configure--enable-libmp3lame
,配置将顺利启动,并显示libmp3lame已为此构建启用。然而,像这样的构建根本无法满足我的需要,因为我需要安卓NDK来做一些工作
我一直在追踪这个问题,直到这个构建脚本声明了sysroot,并且通过一些研究,我尝试将-Luser/include
、-L/user/include
添加到额外的cflags和ldflags(我已经读过它是gcc的默认搜索位置)。我也尝试过其他一些方法,但我相信这里有人可以帮助解决这个具体问题。整个构建脚本如下所示:
额外信息:
- 构建操作系统:Ubuntu 11.10
- FFmpeg版本:来自git的最新版本
- LAME版本:3.9.x
- 安卓NDK:r7
build.sh
#!/bin/bash
if [ "$NDK" = "" ]; then
echo NDK variable not set, assuming ${HOME}/android-ndk
export NDK=${HOME}/android-ndk
fi
SYSROOT=$NDK/platforms/android-3/arch-arm
# Expand the prebuilt/* path into the correct one
TOOLCHAIN=`echo $NDK/toolchains/arm-linux-androideabi-4.4.3/prebuilt/*-x86`
export PATH=$TOOLCHAIN/bin:$PATH
rm -rf build/ffmpeg
mkdir -p build/ffmpeg
cd ffmpeg
# Don't build any neon version for now
for version in armv5te armv7a; do
DEST=../build/ffmpeg
FLAGS="--target-os=linux --cross-prefix=arm-linux-androideabi- --arch=arm"
FLAGS="$FLAGS --sysroot=$SYSROOT"
FLAGS="$FLAGS --soname-prefix=/data/data/net.smartnotes/lib/"
FLAGS="$FLAGS --enable-shared --disable-symver"
FLAGS="$FLAGS --enable-small --optimization-flags=-O2"
FLAGS="$FLAGS --disable-everything --enable-protocol=file"
FLAGS="$FLAGS --enable-libmp3lame --enable-encoder=nellymoser"
case "$version" in
neon)
EXTRA_CFLAGS="-march=armv7-a -mfloat-abi=softfp -mfpu=neon"
EXTRA_LDFLAGS="-Wl,--fix-cortex-a8"
# Runtime choosing neon vs non-neon requires
# renamed files
ABI="armeabi-v7a"
;;
armv7a)
# I have tried many things here.
EXTRA_CFLAGS="-march=armv7-a -mfloat-abi=softfp"
EXTRA_LDFLAGS=""
ABI="armeabi-v7a"
;;
*)
# I have tried many things here.
EXTRA_CFLAGS="-Luser/include"
EXTRA_LDFLAGS=""
ABI="armeabi"
;;
esac
DEST="$DEST/$ABI"
FLAGS="$FLAGS --prefix=$DEST"
mkdir -p $DEST
echo $FLAGS --extra-cflags="$EXTRA_CFLAGS" --extra-ldflags="$EXTRA_LDFLAGS" > $DEST/info.txt
./configure $FLAGS --extra-cflags="$EXTRA_CFLAGS" --extra-ldflags="$EXTRA_LDFLAGS" | tee $DEST/configuration.txt
[ $PIPESTATUS == 0 ] || exit 1
make clean
make -j4 || exit 1
make install || exit 1
done
与其更改包含路径,不如尝试将“make install”创建的所有libmp3lame文件复制到脚本将在其中查找它们的相关目录中。插入ECHO语句,以找出出现错误的位置/CFLAGS/LDFLAGS的确切路径,并将文件复制到该位置,以便找到它们。我看到您正在使用位于
我也遇到了同样的问题,解决方法如下:
使用
这是“bambuser.com”的原始build.sh
与我使用的版本之间的一个小的diff
:
3c3,6
< export NDK=${HOME}/downloads/android-ndk # r8d
---
> if [ "$NDK" = "" ]; then
> echo NDK variable not set, assuming ${HOME}/android-ndk
> export NDK=${HOME}/android-ndk
> fi
15,16c18
< #for version in armv5te armv7a; do
< for version in armv7a; do
---
> for version in armv5te armv7a; do
24c26
< FLAGS="$FLAGS --disable-everything --enable-libmp3lame"
---
> FLAGS="$FLAGS --disable-everything"
请注意,我仍然需要测试生成的FFmpeg构建。
说实话,现在我必须学会如何在我的应用程序中使用它……;)
编辑:我尝试删除——禁用所有内容,它的构建也一样正常,有很多编码器、解码器等,但是构建目录的容量增加到了~40MB。我真的不知道实际的libmp3lame文件安装到了哪里。我确实签入了/user/include,其中有一个lame/lame.h文件,我把它放在了[…]android ndk/platforms/android-3/arch arm/user/include/lame dir中,但是这没有帮助。我一直怀疑头文件本身不足以剪切它。我也尝试过将一个文件夹复制并粘贴到上面的目录中,其中包含了蹩脚的标题和C文件。当然,只复制一个文件或一个文件夹是不行的。您必须确保已将所需的所有文件和文件夹复制到正确的位置。如果我没记错的话,“make install”应该打印出它复制的所有文件,这样你就可以重新生成LAME,在执行“make install”时,请注意所有的文件名和文件夹。谢谢,我通过下载LAME源代码并将其解压缩到一个目录中来做到这一点。当我调用'configure'时,我做了--prefix=(指定了这些生成的文件应该输出到的目录)。完成make安装,获取include和lib目录,并将其分别存储在Android NDK include和lib dir中。我仍然无法让它工作。我放弃了使用FFmpeg为我处理LAME的尝试,转而在我的应用程序中使用LAME的本机版本(我可以开始工作,但音频输出不正确)。[…][…]我在上启动了一个线程,因此关于这一点:。
install prefix ../build/ffmpeg/armeabi-v7a
source path /home/samuele/downloads/ffmpeg/ffmpeg-android/ffmpeg
C compiler arm-linux-androideabi-gcc
ARCH arm (generic)
big-endian no
runtime cpu detection no
ARMv5TE enabled yes
ARMv6 enabled yes
ARMv6T2 enabled yes
ARM VFP enabled yes
IWMMXT enabled no
NEON enabled no
debug symbols yes
strip symbols yes
optimizations small
static yes
shared yes
postprocessing support no
new filter support yes
network support yes
threading support pthreads
SDL support no
Sun medialib support no
AVISynth enabled no
frei0r enabled no
libdc1394 support no
libdirac enabled no
libfaac enabled no
libgsm enabled no
**libmp3lame enabled yes**
libnut enabled no
libopencore-amrnb support no
libopencore-amrwb support no
libopencv support no
libopenjpeg enabled no
librtmp enabled no
libschroedinger enabled no
libspeex enabled no
libtheora enabled no
libvorbis enabled no
libvpx enabled no
libx264 enabled no
libxavs enabled no
libxvid enabled no
zlib enabled no
bzlib enabled no
Enabled decoders:
Enabled encoders:
mpeg2video nellymoser
Enabled hwaccels:
Enabled parsers:
Enabled demuxers:
Enabled muxers:
Enabled protocols:
Enabled filters:
buffer
Enabled bsfs:
Enabled indevs:
Enabled outdevs:
License: LGPL version 2.1 or later
Creating config.mak and config.h...
libavutil/avconfig.h is unchanged