2011-11-30 14 views
15

¿Alguien ha sido capaz de compilar librerías ffmpeg usando el sdk iOS5? He encontrado scripts que usan el 4.3 sdk pero nada para iOS5. Quiero suponer que las bibliotecas construidas con el antiguo SDK y ARMv7 seguirá siendo compatible para iOS 5.FFmpeg para iOS5

Este es el comando que estoy tratando de usar:

./configure \ --cc=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc \ --as='gas-preprocessor.pl /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc' \ --sysroot=/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk \ --extra-ldflags=-L/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk/usr/lib/system \ --target-os=darwin \ --arch=arm \ --cpu=cortex-a8 \ --extra-cflags='-arch armv7' \ --extra-ldflags='-arch armv7' \ --prefix=compiled/armv7 \ --enable-pic \ --enable-cross-compile \ --disable-armv5te \ --disable-ffmpeg \ --disable-ffplay \ --disable-ffserver \ --disable-ffprobe \ --disable-doc 

También he intentado usar un script como este uno:

#!/bin/tcsh -f 

if (! -d armv7) mkdir armv7 
if (! -d lib) mkdir lib 

rm armv7/*.a 

make clean 

./configure --disable-doc --disable-ffmpeg --disable-ffplay --disable-ffserver --enable-cross-compile --arch=arm --target-os=darwin --cc=/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc --as='gas-preprocessor/gas-preprocessor.pl /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc' --sysroot=/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk --cpu=cortex-a8 --extra-cflags='-arch armv7' --extra-ldflags='-arch armv7' --enable-pic 

make 

mv libavcodec/libavcodec.a armv7/ 
mv libavdevice/libavdevice.a armv7/ 
mv libavformat/libavformat.a armv7/ 
mv libavutil/libavutil.a armv7/ 
mv libswscale/libswscale.a armv7/ 

rm lib/*.a 

cp armv7/*.a lib/ 

también han tratado de cambiar a la gcc-4.2, así como la llvm-gcc-4.2. Sin embargo, aparece el error "Opción desconocida" que se muestra a continuación en los comentarios.

Cualquier información será genial y gracias.

+1

Se debe compilar absolutamente bien que yo sepa. ¿Estás viendo algún error específico al compilar con la herramienta de iOS 5? – mattjgalloway

+0

Opción desconocida "--cc =/Desarrollador/Plataformas/iPhoneOS.plataforma/Desarrollador/usr/bin/gcc". El compilador gcc parece que está ahí. ¿Alguna sugerencia? –

+2

Correcto, necesitarás usar 'llvm-gcc' o' clang' en lugar de 'gcc'. ¿Entiende cómo hacer eso o está tratando de usar un script o algo similar para compilarlo? – mattjgalloway

Respuesta

17

ACTUALIZADO: Cambié completamente la respuesta para utilizar el script que uso.

También necesitarás descargar gas-preprocessor.pl de https://github.com/yuvi/gas-preprocessor, ponlo en tu camino y hazlo ejecutable.

A continuación, cree un script (por ejemplo make_for_iphone.sh) y poner esto en él:

export PLATFORM="iPhoneOS" 
export MIN_VERSION="4.0" 
export MAX_VERSION="5.0" 
export DEVROOT=/Developer/Platforms/${PLATFORM}.platform/Developer 
export SDKROOT=$DEVROOT/SDKs/${PLATFORM}${MAX_VERSION}.sdk 
export CC=$DEVROOT/usr/bin/llvm-gcc 
export LD=$DEVROOT/usr/bin/ld 
export CPP=$DEVROOT/usr/bin/cpp 
export CXX=$DEVROOT/usr/bin/llvm-g++ 
export AR=$DEVROOT/usr/bin/ar 
export LIBTOOL=$DEVROOT/usr/bin/libtool 
export NM=$DEVROOT/usr/bin/nm 
export CXXCPP=$DEVROOT/usr/bin/cpp 
export RANLIB=$DEVROOT/usr/bin/ranlib 

COMMONFLAGS="-pipe -gdwarf-2 -no-cpp-precomp -isysroot ${SDKROOT} -marm -fPIC" 
export LDFLAGS="${COMMONFLAGS} -fPIC" 
export CFLAGS="${COMMONFLAGS} -fvisibility=hidden" 
export CXXFLAGS="${COMMONFLAGS} -fvisibility=hidden -fvisibility-inlines-hidden" 

FFMPEG_LIBS="libavcodec libavdevice libavformat libavutil libswscale" 

echo "Building armv6..." 

make clean 
./configure \ 
    --cpu=arm1176jzf-s \ 
    --extra-cflags='-arch armv6 -miphoneos-version-min=${MIN_VERSION} -mthumb' \ 
    --extra-ldflags='-arch armv6 -miphoneos-version-min=${MIN_VERSION}' \ 
    --enable-cross-compile \ 
    --arch=arm \ 
    --target-os=darwin \ 
    --cc=${CC} \ 
    --sysroot=${SDKROOT} \ 
    --prefix=installed \ 
    --disable-network \ 
    --disable-decoders \ 
    --disable-muxers \ 
    --disable-demuxers \ 
    --disable-devices \ 
    --disable-parsers \ 
    --disable-encoders \ 
    --disable-protocols \ 
    --disable-filters \ 
    --disable-bsfs \ 
    --enable-decoder=h264 \ 
    --enable-decoder=svq3 \ 
    --enable-gpl \ 
    --enable-pic \ 
    --disable-doc 
perl -pi -e 's/HAVE_INLINE_ASM 1/HAVE_INLINE_ASM 0/' config.h 
make -j3 

mkdir -p build.armv6 
for i in ${FFMPEG_LIBS}; do cp ./$i/$i.a ./build.armv6/; done 

echo "Building armv7..." 

make clean 
./configure \ 
    --cpu=cortex-a8 \ 
    --extra-cflags='-arch armv7 -miphoneos-version-min=${MIN_VERSION} -mthumb' \ 
    --extra-ldflags='-arch armv7 -miphoneos-version-min=${MIN_VERSION}' \ 
    --enable-cross-compile \ 
    --arch=arm \ 
    --target-os=darwin \ 
    --cc=${CC} \ 
    --sysroot=${SDKROOT} \ 
    --prefix=installed \ 
    --disable-network \ 
    --disable-decoders \ 
    --disable-muxers \ 
    --disable-demuxers \ 
    --disable-devices \ 
    --disable-parsers \ 
    --disable-encoders \ 
    --disable-protocols \ 
    --disable-filters \ 
    --disable-bsfs \ 
    --enable-decoder=h264 \ 
    --enable-decoder=svq3 \ 
    --enable-gpl \ 
    --enable-pic \ 
    --disable-doc 
perl -pi -e 's/HAVE_INLINE_ASM 1/HAVE_INLINE_ASM 0/' config.h 
make -j3 

mkdir -p build.armv7 
for i in ${FFMPEG_LIBS}; do cp ./$i/$i.a ./build.armv7/; done 

mkdir -p build.universal 
for i in ${FFMPEG_LIBS}; do lipo -create ./build.armv7/$i.a ./build.armv6/$i.a -output ./build.universal/$i.a; done 

for i in ${FFMPEG_LIBS}; do cp ./build.universal/$i.a ./$i/$i.a; done 

make install 

Esto compila las dos versiones ARMv6 y ARMv7 y las pone en una biblioteca de grasa usando lipo. Se instala en una carpeta debajo de donde ejecuta el script desde installed.

Tenga en cuenta que en el momento en que he tenido que apagar línea de montaje utilizando una línea perl reemplazar a cambiar HAVE_INLINE_ASM1-0. Esto se debe a este problema con gas-preprocessor.pl - https://github.com/yuvi/gas-preprocessor/issues/16.

También tenga en cuenta que esto ha desactivado todos los codificadores, decodificadores, muxers, demultiplexores, etc., excepto el decodificador H264. Simplemente cambie las líneas de configuración para compilar lo que desea para su caso de uso.

Recuerde también que esto ha habilitado el código GPL, por lo que debe tener en cuenta lo que eso significa para las aplicaciones de iPhone. Si no estás enterado, entonces deberías leer un poco sobre eso.

+0

error: Opción desconocida "--cc =/Desarrollador/Plataformas/iPhoneOS.plataforma/Desarrollador/usr/bin/llvm-gcc". –

+0

Cuando ejecuto el script obtengo: make: *** No hay regla para hacer el objetivo 'clean '. Detener. ./configure: comando no encontrado. make: *** No se especificaron objetivos y no se encontró ningún archivo MAKE. Detener. –

+0

Matt, he compilado ffmpeg con tu script y funciona muy bien. Sin embargo, al arrastrar los archivos .a en Xcode y compilar, obtengo 'Símbolos indefinidos para la arquitectura armv7: "_avcodec_init", a los que se hace referencia desde: ....' ¿Alguna idea? – AndyDunn

3

Aquí está mi Configurar trabajando para compilación cruzada FFmpeg en iOS 6, el arco es ARMv7

NOTA: Debe tener gas-preprocessor.pl dentro /usr/local/bin/ favor no continúe hasta que tenga gas-preprocessor.pl en su directorio bin

  • Descargar FFmpeg 1.0 "Ángel" de here

  • Descomprímelo y colóquelo en algún lugar, es decirsu carpeta Desktop

  • Abrir el terminal y vaya a unzipped FFmpeg folder

  • Copiar y pegar el siguiente comando, (ser paciente tomará un tiempo)

./configure --disable-doc --disable-ffmpeg --disable-ffplay --disable-ffserver --enable-cross-compile --arch=arm --target-os=darwin --cc=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc --as='gas-preprocessor/gas-preprocessor.pl /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc' --sysroot=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.0.sdk --cpu=cortex-a8 --extra-cflags='-arch armv7' --extra-ldflags='-arch armv7 -isysroot /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.0.sdk' --enable-pic --enable-decoder=rawvideo --disable-asm

  • Ahora escriba el siguiente comando en la terminal make (a esperar un poco más)

  • Una vez que haya terminado de escribir ahora en el terminal sudo make install (esperar de nuevo)

  • Ir a /usr/local/lib para encontrar sus recién horneados armv7 libs

  • disfrutar!

Alex

+0

¡Gracias! Trabajado como un encanto. Solo tuve que instalar pkg-config antes de ejecutar ./configure. – Hyndrix

+0

Muchas gracias, hombre. Estoy de acuerdo con @Hyndrix, pero bueno. –