1

Android用のffmpegをコンパイルしようとしていますが、x86アーキテクチャ用です。arm .so のコンパイルに成功しましたが、すべて動作します。ビルド スクリプト内の関連する場所で arm を x86 に置き換えることでうまくいくと思います。残念ながらそうではなく、奇妙なことが起こっています。

最初に、ffmpeg のコンパイル中にこれを取得します。

/home/ankur/android-ndk-r8/platforms/android-8/arch-arm//usr/include/strings.h:49: warning: redundant redeclaration of 'index'

arch-x86 の代わりに arch-arm に注目してください。最後に私はこれを得る:

/home/ankur/android-ndk-r8/toolchains/x86-4.4.3/prebuilt/linux-x86/bin/i686-android-linux-ld: libavcodec/libavcodec.a(4xm.o): Relocations in generic ELF (EM: 40)
/home/ankur/android-ndk-r8/toolchains/x86-4.4.3/prebuilt/linux-x86/bin/i686-android-linux-ld: libavcodec/libavcodec.a(4xm.o): Relocations in generic ELF (EM: 40)
/home/ankur/android-ndk-r8/toolchains/x86-4.4.3/prebuilt/linux-x86/bin/i686-android-linux-ld: libavcodec/libavcodec.a(4xm.o): Relocations in generic ELF (EM: 40)
libavcodec/libavcodec.a(4xm.o): could not read symbols: File in wrong format

作成したビルド スクリプトは次のようになります。

#!/bin/bash

NDK=~/android-ndk-r8
PLATFORM=$NDK/platforms/android-8/arch-x86/
PREBUILT=$NDK/toolchains/x86-4.4.3/prebuilt/linux-x86
function build_one_r8
{
./configure \
    --disable-shared \
    --enable-static \
    --enable-gpl \
    --enable-version3 \
    --enable-nonfree \
    --disable-doc \
    --disable-ffmpeg \
    --disable-ffplay \
    --disable-ffprobe \
    --disable-ffserver \
    --disable-avdevice \
    --disable-avfilter \
    --disable-postproc \
    --enable-small \
    --cross-prefix=$PREBUILT/bin/i686-android-linux- \
    --enable-cross-compile \
    --target-os=linux \
    --extra-cflags="-I$PLATFORM/usr/include" \
    --arch=x86 \
    --disable-symver \
    --disable-debug \
    --disable-stripping \
    $ADDITIONAL_CONFIGURE_FLAG
sed -i 's/HAVE_LRINT 0/HAVE_LRINT 1/g' config.h
sed -i 's/HAVE_LRINTF 0/HAVE_LRINTF 1/g' config.h
sed -i 's/HAVE_ROUND 0/HAVE_ROUND 1/g' config.h
sed -i 's/HAVE_ROUNDF 0/HAVE_ROUNDF 1/g' config.h
sed -i 's/HAVE_TRUNC 0/HAVE_TRUNC 1/g' config.h
sed -i 's/HAVE_TRUNCF 0/HAVE_TRUNCF 1/g' config.h
make clean
make  -j4 install
$PREBUILT/bin/i686-android-linux-ar d libavcodec/libavcodec.a inverse.o
$PREBUILT/bin/i686-android-linux-ld -rpath-link=$PLATFORM/usr/lib -L$PLATFORM/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  --warn-once  --dynamic-linker=/system/bin/linker $PREBUILT/lib/gcc/i686-android-linux/4.4.3/libgcc.a
}
function build_one_r8_2
{
$PREBUILT/bin/i686-android-linux-ar d libavcodec/libavcodec.a inverse.o
$PREBUILT/bin/i686-android-linux-ld -rpath-link=$PLATFORM/usr/lib -L$PLATFORM/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  --warn-once  --dynamic-linker=/system/bin/linker $PREBUILT/lib/gcc/i686-android-linux/4.4.3/libgcc.a
}
#x86
CPU=x86
OPTIMIZE_CFLAGS="-march=$CPU "
PREFIX=./android/$CPU
ADDITIONAL_CONFIGURE_FLAG=
build_one_r8

これが不可能ではなく、何か間違ったことをしていることを願っています。

ありがとう!

4

2 に答える 2

2

私は Atom 用にコンパイルできましたが、GoogleTV は NDK をサポートしていません。これが、私の GoogleTV デバイス用に NDK をコンパイルしようとしたすべての試みがうまくいかなかった理由を説明しています。私はそれがすぐに来ることを願っています!

于 2012-09-26T11:08:39.737 に答える
0

これが私のビルドスクリプトです。参考になれば、問題の一部である可能性があると思われない設定がいくつかあります。ffmpeg ソース ディレクトリ (ソース) の下のディレクトリからソースを取得します。IE スクリプトは build.sh と呼ばれ、~/android/ffmpeg にあり、ffmpeg ソースは ~/android/ffmpeg/source にあり、スクリプトを実行するとビルド出力は ~/android/build/armeabi-v7a になります。そのような:

~/android/ffmpeg$ source build.sh

これは build.sh です:

#!/bin/bash

NDK=~/android/ndk
SYSROOT=$NDK/platforms/android-9/arch-arm
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/arm-linux-androideabi-
ABI="armeabi-v7a"
CPU="armv7-a"
ARCH="arm"
FPU="vfpv3-d16"
ANDROID_LIBS=$SYSROOT/usr/lib
DEST="../build/ffmpeg/$ABI"
EXTRA_LDFLAGS="-Wl,--fix-cortex-a8 -L$ANDROID_LIBS -Wl,-rpath-link,$ANDROID_LIBS"
EXTRA_CXXFLAGS="-Wno-multichar -Wno-psabi -fno-exceptions -fno-rtti"
EXTRA_CFLAGS="-DANDROID -marm -march=$CPU -mfloat-abi=softfp -mfpu=$FPU"

function configure
{
./configure \
    --target-os=linux \
    --prefix=$DEST \
    --cross-prefix=$TOOLCHAIN \
    --sysroot=$SYSROOT \
    --extra-cflags="$EXTRA_CFLAGS" \
    --extra-ldflags="$EXTRA_LDFLAGS" \
    --extra-cxxflags="$EXTRA_CXXFLAGS" \
    --enable-cross-compile \
    --extra-libs="-lgcc" \
    --arch=$ARCH \
    --cpu=$CPU \
    --disable-debug \
    --disable-runtime-cpudetect \
    --disable-optimizations \
    --disable-neon \
    --disable-network \
    --disable-armv5te \
    --disable-armv6 \
    --disable-armv6t2 \
    --disable-armvfp \
    --disable-everything \
    --disable-doc \
    --disable-decoders \
    --disable-encoders \
    --disable-demuxers \
    --disable-muxers \
    --disable-protocols \
    --disable-indevs \
    --disable-filters \
    --disable-outdevs \
    --disable-bsfs \
    --disable-shared \
    --disable-ffprobe \
    --disable-ffserver \
    --disable-avfilter \
    --disable-swresample \
    --disable-avdevice \
    --disable-ffplay \
    --disable-ffmpeg \
    --disable-swscale-alpha \
    --disable-avresample \
    --enable-static \
    --enable-pthreads \
    --enable-protocol=file \
    --enable-libvpx \
    --enable-decoder=vp8 \
    --enable-parser=vp8 \
    --enable-demuxer=matroska
}
cd source
make clean &&
configure &&
make -j8 && 
rm -rf $DEST &&
mkdir -p $DEST &&
make install
于 2012-07-03T13:07:15.273 に答える