问题
I've been going at this, literally for days. I'm trying to build FFmpeg with libmp3lame for use in an Android application. The build script sets a --sysroot
flag that points to the Android NDK directory necessary to build these libraries in a way that Android can use them.
The problem comes when I add the flag to --enable-libmp3lame
; I get ERROR: libmp3lame >= 3.98.3 not found
during the build start up. I know that LAME, and it's libraries are installed, because I can just run ./configure --enable-libmp3lame
manually and the configuration launches without a hitch, and shows that libmp3lame is enabled for this build. However, building like this will simply not work for what I need it for, since I need the Android NDK to do some work.
I've tracked the problem down to the fact that this build script is declaring the sysroot, and through some research, I've tried adding -Luser/include
, -L/user/include
to the extra cflags, and ldflags (which I've read is the default search location for gcc). I've tried several other things as well, but I'm confident that someone out here can help with this specific problem. This entire build script is as follows:
Extra info:
- Build OS: Ubuntu 11.10
- FFmpeg Ver: Latest from git
- LAME Ver: 3.9.x
- Android 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
回答1:
Instead of changing the include paths, why don't you try copying all the libmp3lame files that were created by 'make install' to the relevant directory where the script will look for them. Insert ECHO statements to find out what exactly the PATH/CFLAGS/LDFLAGS are at the point where you get the error, and copy the files there so it does find them.
回答2:
I saw you were using the project located at http://bambuser.com/opensource
I had the same problem and resolved like this:
- compile lame for android using https://github.com/intervigilium/liblame
this is a small
diff
between the originalbuild.sh
from "bambuser.com" and the one I used: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"
from "intervigilium" project copy the folder
liblame/jni/lame
toPATH_TO_NDK/platforms/android-3/arch-arm/usr/include
- from "intervigilium" project copy
liblame/libs/armeabi-v7a/liblame.so
toPATH_TO_NDK/platforms/android-3/arch-arm/usr/libs
and RENAME it inlibmp3lame.so
. - finally run
build.sh
. you should be fine:
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
Be aware, I still need to test the resulting FFmpeg build. To say the truth, now I have to learn how to use it in my App... ;)
EDIT: I tried removing --disable-everything
and it builds OK the same, with a lot of encoders, decoders etc, but increasing to ~40MB for the build
dir.
来源:https://stackoverflow.com/questions/9123846/how-can-i-get-ffmpeg-to-locate-installed-libraries-when-sysroot-is-pointing-to