2012-02-09 12 views
13

LAME (http://lame.sourceforge.net/) es una biblioteca escrita en lenguaje c. Puede convertir archivos de sonido PCM a archivos MP3. Lo uso para convertir archivos de sonido a archivos MP3 en iPhone. Los archivos de sonido de PCM de origen se graban por micrófono.¿Cómo puedo compilar lame como biblioteca estática (.a) para armv6 y armv7 de iPhone?

Para incluir LAME en mi proyecto XCode, necesito compilar el LAME en 3 bibliotecas estáticas (.a), para i386 (simulador IOS), armv6 y armv7.

Después de mucha búsqueda, he cumplido con éxito una biblioteca estática para la versión i368 (iOS Simulator). Aquí está comandos:

./configure \ 
    CFLAGS="-isysroot /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator5.0.sdk" \ 
    CC="/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc -arch i386" \ 
    --prefix=/Volumes/Data/test/i386 \ 
    --host="arm-apple-darwin9" 

make && make install 

El problema es que no puedo compilar para ARMv6 y ARMv7. He intentado estos comandos pero informa un error. ¿Alguien tiene soluciones?

./configure \ 
    CFLAGS="-isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS5.0.sdk" \ 
    CC="/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc -arch armv6" \ 
    --prefix=/Volumes/Data/test/arm6 \ 
    --host="arm-apple-darwin9" 

make && make install 

El error es:

console.c:25:21: error: curses.h: No such file or directory 
console.c:27:20: error: term.h: No such file or directory 
console.c: In function ‘get_termcap_string’: 
console.c:92: warning: implicit declaration of function ‘tgetstr’ 
console.c:92: warning: assignment makes pointer from integer without a cast 
console.c: In function ‘get_termcap_number’: 
console.c:102: warning: implicit declaration of function ‘tgetnum’ 
console.c: In function ‘apply_termcap_settings’: 
console.c:115: warning: implicit declaration of function ‘tgetent’ 
make[2]: *** [console.o] Error 1 
make[1]: *** [all-recursive] Error 1 
make: *** [all] Error 2 

Cuando instalo ncurses, informó lo siguiente:

../curses.h:60:25: error: ncurses_dll.h: No such file or directory 
In file included from console.c:25: 
../curses.h:250: warning: return type defaults to ‘int’ 
../curses.h: In function ‘NCURSES_EXPORT_VAR’: 
../curses.h:250: error: expected declaration specifiers before ‘acs_map’ 
../curses.h:340: error: storage class specified for parameter ‘SCREEN’ 
../curses.h:341: error: storage class specified for parameter ‘WINDOW’ 
../curses.h:343: error: storage class specified for parameter ‘attr_t’ 
../curses.h:388: warning: empty declaration 
../curses.h:401: error: expected specifier-qualifier-list before ‘attr_t’ 
../curses.h:443: warning: empty declaration 
../curses.h:542: error: storage class specified for parameter ‘NCURSES_OUTC’ 
../curses.h:551: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘addch’ 
../curses.h:552: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘addchnstr’ 
../curses.h:553: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘addchstr’ 
../curses.h:554: error: expected ‘=’, ‘,’, ‘;’, ‘asm’ or ‘__attribute__’ before ‘addnstr’ 

¿Hay alguien me puede dar una forma de recopilar LAME a biblioteca estática (. a) para el brazov6 y el brazov7?

Respuesta

13

Faltan algunos pasos. En primer lugar, no desea construir el frontend ya que solo podrá usar LAME como biblioteca. También debe construir la biblioteca de forma estática, de lo contrario no podrá compilarla en su proyecto.

Básicamente, tiene que configurar el árbol de fuentes y compilarlo cuatro veces, una para el simulador (i686), iPhone (armv6), iPad (armv7) y iPhone 5 (armv7s) luego lipo los archivos .a juntos en una biblioteca universal. El vinculador Xcode clasificará todo lo demás por usted cuando compile el resto de su proyecto.

Utilicé este script de shell para crear un archivo universal libmp3lame.a. Tenga en cuenta que esto utiliza rutas Xcode 4.3 y compiladores iOS 5.1.

#!/bin/bash 

SDK_VERSION="5.1" 

mkdir build 

function build_lame() 
{ 
    make distclean 

    ./configure \ 
     CFLAGS="-isysroot /Applications/Xcode.app/Contents/Developer/Platforms/${SDK}.platform/Developer/SDKs/${SDK}${SDK_VERSION}.sdk" \ 
     CC="/Applications/Xcode.app/Contents/Developer/Platforms/${SDK}.platform/Developer/usr/bin/gcc -arch ${PLATFORM}" \ 
     --prefix=/Users/mcrute/Desktop/lame \ 
     --host="arm-apple-darwin9" \ 
     --disable-shared \ 
     --enable-static \ 
     --disable-decoder \ 
     --disable-frontend 

    make 
    cp "libmp3lame/.libs/libmp3lame.a" "build/libmp3lame-${PLATFORM}.a" 
} 

PLATFORM="i686" 
SDK="iPhoneSimulator" 
build_lame 

PLATFORM="armv6" 
SDK="iPhoneOS" 
build_lame 

PLATFORM="armv7" 
build_lame 

PLATFORM="armv7s" 
build_lame 

lipo -create build/* -output build/libmp3lame.a 

Tome el archivo de libmp3lame.a ./build junto con el archivo desde el directorio lame.h incluir y colóquelos en su proyecto Xcode y que debe estar listo para su uso cojos ya sea en el simulador o un verdadero dispositivo.

+0

Hombre, su respuesta es un salvavidas :))) ¡Muchas gracias! – Anton

+0

@mcrute Estoy usando esta secuencia de comandos exacta, excepto que he cambiado la versión de SDK a 6.0 y me aparece el siguiente error al final: lipo: build/libmp3lame-armv6.a y build/libmp3lame-armv7.a tienen las mismas arquitecturas (armv7) y no pueden estar en el mismo archivo de salida de grasa – JonathanC

+0

@mcrute También tenga en cuenta que para admitir iPhone5 debe agregar PLATFORM = "armv7s" build_lame – JonathanC

4

Gracias @mcrute por su excelente respuesta, y XCode 5 requirement update He actualizado el script. Espero que sea útil para nuevos usuarios.

NOTA: No se olvide de actualizar SDK_VERSION basado en la instalación del sistema

#!/bin/bash 

DEVELOPER=`xcode-select -print-path` 

SDK_VERSION="7.1" 

mkdir build 

function build_lame() 
{ 
    make distclean 

    ./configure \ 
     CFLAGS="-isysroot ${DEVELOPER}/Platforms/${SDK}.platform/Developer/SDKs/${SDK}${SDK_VERSION}.sdk" \ 
     CC="${DEVELOPER}/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -arch ${PLATFORM} -miphoneos-version-min=7.0 " \ 
     --prefix=/Users/mcrute/Desktop/lame \ 
     --host="arm-apple-darwin9" \ 
     --disable-shared \ 
     --enable-static \ 
     --disable-decoder \ 
     --disable-frontend 

    make -j4 
    cp "libmp3lame/.libs/libmp3lame.a" "build/libmp3lame-${PLATFORM}.a" 
} 

PLATFORM="i686" 
SDK="iPhoneSimulator" 
build_lame 

PLATFORM="armv6" 
SDK="iPhoneOS" 
build_lame 

PLATFORM="armv7" 
build_lame 

PLATFORM="armv7s" 
build_lame 

lipo -create build/* -output build/libmp3lame.a 
+1

Roozbeh, después de ejecutar el script Tengo este error: configure: error: en '/Users/ivan/Desktop/lame-3.99.5 ': configurar: error: el preprocesador C"/lib/cpp "falla la comprobación de cordura. ¿Tienes alguna idea de cómo resolverlo? –

+0

Probablemente utilizando un entorno diferente. Estaba usando OSX 10.8 en ese momento. ¿Sabes dónde está fallando? En configurar o hacer? –

+0

Hola @Ivan Kozlov, puedes intentar agregar "CPP =" $ {DEVELOPER} /Toolchains/XcodeDefault.xctoolchain/usr/bin/cpp "ver mi respuesta a continuación. – ZYiOS

7

Para Xcode 6.1, iOS SDK 8.1, utilizo a continuación script de shell:

Soporte ARMv7, arm64, i686 y x86_64

#!/bin/bash 

DEVELOPER=`xcode-select -print-path` 

SDK_VERSION="8.1" 

LAMEDIR="/Users/zuyuanzhou/Downloads/lame-3.99.5" 

mkdir build 

function build_lame() 
{ 
make distclean 

./configure \ 
CFLAGS="-isysroot ${DEVELOPER}/Platforms/${SDK}.platform/Developer/SDKs/${SDK}${SDK_VERSION}.sdk" \ 
CC="${DEVELOPER}/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang -arch ${PLATFORM} -miphoneos-version-min=7.0 " \ 
CPP="${DEVELOPER}/Toolchains/XcodeDefault.xctoolchain/usr/bin/cpp" \ 
--prefix="$LAMEDIR" \ 
--host="$HOST" \ 
--disable-shared \ 
--enable-static \ 
--disable-decoder \ 
--disable-frontend 

make -j4 
cp "libmp3lame/.libs/libmp3lame.a" "build/libmp3lame-${PLATFORM}.a" 
} 


PLATFORM="i686" 
SDK="iPhoneSimulator" 
HOST="i686-apple-darwin14.1.0" 
build_lame 

PLATFORM="x86_64" 
build_lame 

PLATFORM="armv7" 
SDK="iPhoneOS" 
HOST="arm-apple-darwin9" 
build_lame 

PLATFORM="arm64" 
build_lame 

lipo -create build/* -output build/libmp3lame.a 
+0

Recibo un error al crear el archivo de compilación. Obteniendo un error en línea 13 de este script. ¿Puedes proporcionar todas las compilaciones de LAME? Entonces, sería útil. Gracias –

+0

@RahulPatel ¿Qué error obtuviste? – ZYiOS

+0

Algunos archivos .sh no se encuentran. Creo que algo está mal con la ruta –

Cuestiones relacionadas