2014-01-08 39 views
2

我是Mac用户。我跟着这个教程:http://www.roman10.net/how-to-build-ffmpeg-with-ndk-r9/打造FFmpeg的为Android NDK使用构建Android的FFMpeg NDK给我.a而不是.so文件

我使用FFmpeg的2.1NDK R9

这是我build_android.sh文件在我FFMepg文件夹这是在我的$NDK/sources文件夹:

#!/bin/bash 

NDK=$HOME/Desktop/adt/android-ndk 
SYSROOT=$NDK/platforms/android-8/arch-arm/ 
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64 
function build_one 
{ 
./configure \ 
    --prefix=$PREFIX \ 
    --enable-shared \ 
    --disable-static \ 
    --disable-doc \ 
    --disable-ffmpeg \ 
    --disable-ffplay \ 
    --disable-ffprobe \ 
    --disable-ffserver \ 
    --disable-avdevice \ 
    --disable-doc \ 
    --disable-symver \ 
    --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \ 
    --target-os=linux \ 
    --arch=arm \ 
    --enable-cross-compile \ 
    --sysroot=$SYSROOT \ 
    --extra-cflags="-Os -fpic $ADDI_CFLAGS" \ 
    --extra-ldflags="$ADDI_LDFLAGS" \ 
    $ADDITIONAL_CONFIGURE_FLAG 
make clean 
make 
make install 
} 
CPU=arm 
PREFIX=$(pwd)/android/$CPU 
ADDI_CFLAGS="-marm" 
build_one 

Evrything是编译好的,但最后我得到.a文件,而在本教程中,我应该得到.so文件。

我做了什么错?唯一的变化就是:

TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64 

是:

TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-x86_64 
教程

回答

0

我试过你的方法,但没有成功。 更改为--disable-sharedenable-static

你化妆安装后添加以下

$TOOLCHAIN/bin/arm-linux-androideabi-ar d libavcodec/libavcodec.a inverse.o 
$TOOLCHAIN/bin/arm-linux-androideabi-ld -rpath-link=$SYSROOT/usr/lib -L$SYSROOT/usr/lib -soname libffmpeg.so -shared -nostdlib -z,noexecstack -Bsymbolic --whole-archive --no-undefined -o $PREFIX/libffmpeg.so libavcodec/libavcodec.a libavformat/libavformat.a libavutil/libavutil.a libswscale/libswscale.a -lc -lm -lz -ldl -llog -lx264 --warn-once --dynamic-linker=/system/bin/linker $TOOLCHAIN/lib/gcc/arm-linux-androideabi/4.4.3/libgcc.a 

这为我工作!这种方法建立.a并将所有.a文件链接到.so文件。将libffmpeg.so更改为您想要的任何名称。

+0

谢谢你的回答。执行最后2个命令时出现以下错误:/path/to/ndk/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-ld:,noexecstack:unknown - z选项 /path/to/ndk/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/bin/arm-linux-androideabi-ld:使用--help选项获取使用信息 –

+0

使用'path /到/ ndk/toolchains/arm-linux-androideabi-4.8/prebuilt/darwin-x86_64/bin/arm -linux-androideabi -ld --help。检查'-z,noexecstack'。如果它不在那里,请尝试删除它。其实我建立在linux-32bit ubunthu上。我没有在任何达尔文机器上工作。如果你使用的是darwin-32bit操作系统,建议你使用ndk 32位版本。因为在我的linux-32bit操作系统上使用32位+ 64位ndk会导致很多错误,这些错误可以在使用32位构建的ndk时解决 – nmxprime

0

你应该使用随NDK的make

... 
$NDK/prebuilt/darwin-x86_64/bin/make clean 
$NDK/prebuilt/darwin-x86_64/bin/make 
$NDK/prebuilt/darwin-x86_64/bin/make install 

顺便说一句,你可以把ffmpeg来源的任何地方,没有必要把它NDK/sources下。

相关问题