環境:
CentOS6.2——64位
在根目錄下創建work文件夾:cd / && mkdir work
a) 先把要用到的安裝包下載到本地:
FFmpeg:git clone git://source.ffmpeg.org/ffmpeg.git ffmpeg
一定要看好下載對應本地系統的軟件包版本。
創建好的目錄結構是:work/ffmpeg work/android-ndk-r8b
b)配置環境變量:(可以省略)
export ANDROID_NDK_HOME=/work/android-ndk-r8b
export PATH=$ANDROID_NDK_HOME:$PATH
c) 進入ffmpeg目錄,創建config.sh文件,並將下面的文字部分寫入文件:
[plain]
export ANDROID_NDK=/work/android-ndk-r8b
export TOOLCHAIN=/work/tmp/ffmpeg
export SYSROOT=$TOOLCHAIN/sysroot/
$ANDROID_NDK/build/tools/make-standalone-toolchain.sh --platform=android-14 --install-dir=$TOOLCHAIN
export PATH=$TOOLCHAIN/bin:$PATH
export CC=arm-linux-androideabi-gcc
export LD=arm-linux-androideabi-ld
export AR=arm-linux-androideabi-ar
CFLAGS="-O3 -Wall -mthumb -pipe -fpic -fasm \
-finline-limit=300 -ffast-math \
-fstrict-aliasing -Werror=strict-aliasing \
-fmodulo-sched -fmodulo-sched-allow-regmoves \
-Wno-psabi -Wa,--noexecstack \
-D__ARM_ARCH_5__ -D__ARM_ARCH_5E__ \
-D__ARM_ARCH_5T__ -D__ARM_ARCH_5TE__ \
-DANDROID -DNDEBUG"
EXTRA_CFLAGS="-march=armv7-a -mfpu=neon -mfloat-abi=softfp -mvectorize-with-neon-quad"
EXTRA_LDFLAGS="-Wl,--fix-cortex-a8"
FFMPEG_FLAGS="--prefix=/tmp/ffmpeg/build \
--target-os=linux \
--arch=arm \
--enable-cross-compile \
--cc=arm-linux-androideabi-gcc \
--cross-prefix=arm-linux-androideabi- \
--enable-shared \
--disable-symver \
--disable-doc \
--disable-ffplay \
--disable-ffmpeg \
--disable-ffprobe \
--disable-ffserver \
--disable-avdevice \
--disable-avfilter \
--disable-encoders \
--disable-muxers \
--disable-filters \
--disable-devices \
--disable-everything \
--enable-protocols \
--enable-parsers \
--enable-demuxers \
--disable-demuxer=sbg \
--enable-decoder=h264 \
--enable-bsfs \
--enable-network \
--enable-swscale \
--enable-asm \
--enable-version3"
./configure $FFMPEG_FLAGS --extra-cflags="$CFLAGS $EXTRA_CFLAGS" --extra-ldflags="$EXTRA_LDFLAGS"
make clean
make -j4
make install
當然,configure的參數可以根據自己的需要指定。
d) 執行文件:
./config.sh
這時候可能就會出現各種各樣的問題了,不要慌,看看config.log文件,這時候如果有類似
/lib/ld-linux.so.2: bad ELF interpreter: No such file or directory
這種問題,這時候就要借助google大神了,萬能的google,程序員的福音,好像是缺少什麼庫依賴,沒關系,執行
yum install alibc.i686
問題似乎可以解決了,接下來繼續執行
./config.sh
又報出錯誤:
/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/as: error while loading shared libraries: libz.so.1: cannot open shared object file: No such file or directory
一大堆,不過不要緊,有萬能的google在,好像是缺少了zlib,好,跟前面一樣執行
yum install zlib.i686
可能會提示安裝失敗什麼的,這時候就要去官網下載最新版本的zlib了:http://zlib.net/
下載後解壓,進入目錄後依次執行
./configure
make
make install
這時候問題看似都解決了,不過我的機器報出錯了,lib文件安錯位置了,configure默認安裝到了/usr/local/lib裡,沒關系,這時候設置一個軟鏈接就好了:
mv ./lib/libz.so.1 ./lib/libz.so.1_backup
ln -s /usr/local/lib/libz.so.1 ./lib/libz.so.1
再次進入ffmpeg目錄執行:
./config.sh
如果問題沒有解決,提示mysql什麼的,告訴你一個狠招
yum install mysql-embedded.i686
^ o ^
這下沒問題了,執行
./config.sh
……………………………………………………
…………………………………………………………………………
…………………………………………………………………………………………
………………………………………………………………………………
…………………………
漫長的編譯過程……
最終大功告成,進入/tmp/ffmpeg/sysroot/usr裡就看到了你想得到的頭文件和庫文件,而對應的ffmpeg所有的lib文件夾下也生成了對應的.so文件。