2012-02-09 13 views
13

LAME (http://lame.sourceforge.net/) è una libreria scritta in linguaggio c. Può convertire file audio PCM in file MP3. Lo uso per convertire file audio in file MP3 su iPhone. I file audio PCM sorgente vengono registrati dal microfono.Come posso compilare lame come libreria statica (.a) per armv6 e armv7 di iPhone?

Per includere LAME nel mio progetto XCode, ho bisogno di compilare LAME a 3 librerie statiche (.a), per i386 (IOS Simulator), armv6 e armv7.

Dopo molte ricerche, ho eseguito correttamente una libreria statica per la versione i368 (iOS Simulator). Ecco i comandi:

./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 

Il problema è che non riesco a compilare per armv6 e armv7. Ho provato questi comandi ma segnala un errore. C'è qualcuno ha soluzioni?

./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 

L'errore è:

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 

Quando installo ncurses, ha segnalato questo:

../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’ 

C'è qualcuno mi può dare un modo per compilare LAME alla libreria statica (. a) per armv6 e armv7?

risposta

13

Ti mancano pochi passaggi. Prima di tutto non vuoi costruire il frontend dato che sarai in grado di usare LAME come libreria in ogni caso. Devi anche costruire la libreria staticamente altrimenti non sarai in grado di costruirla nel tuo progetto.

Fondamentalmente, è necessario impostare l'albero dei sorgenti e compilarlo quattro volte, una volta per il simulatore (i686), iPhone (armv6), iPad (armv7) e iPhone 5 (armv7s) quindi lipo i file .a insieme in una biblioteca universale. Il linker Xcode ordinerà tutto il resto per te quando compilerai il resto del tuo progetto.

Ho usato questo script di shell per creare un file libmp3lame.a universale. Nota: utilizza i percorsi Xcode 4.3 e i compilatori 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 

Prendere il file libmp3lame.a da ./build insieme al file lame.h dalla directory includere e rilasciarli nel progetto Xcode e si dovrebbe essere pronto per l'uso lame sia nel simulatore o un vero e proprio dispositivo.

+0

Uomo, la tua risposta è un risparmiatore di vita :))) Grazie mille! – Anton

+0

@mcrute Sto usando questo script esatto tranne che ho cambiato la versione sdk alla 6.0 e ottengo il seguente errore alla fine: lipo: build/libmp3lame-armv6.a e build/libmp3lame-armv7.avere le stesse architetture (armv7) e non può essere nello stesso file di output grasso – JonathanC

+0

@mcrute notare anche che per supportare iPhone5 è necessario aggiungere PLATFORM = "armv7s" build_lame – JonathanC

4

Grazie a @mcrute per la sua ottima risposta, e XCode 5 requirement update Ho aggiornato lo script. Spero sia utile per i nuovi utenti.

NOTA: Non dimenticare di aggiornare SDK_VERSION, sulla base di installazione 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, dopo aver eseguito lo script, ho ricevuto questo errore: configure: error: in '/Users/ivan/Desktop/lame-3.99.5 ': configure: errore: il preprocessore C"/lib/cpp "fallisce il controllo di integrità. Hai qualche idea su come risolverlo? –

+0

Probabilmente stai usando un ambiente diverso. Stavo usando OSX 10.8 al momento. Sai dove sta fallendo? In configure o make? –

+0

Ciao @Ivan Kozlov, puoi provare ad aggiungere "CPP =" $ {DEVELOPER} /Toolchains/XcodeDefault.xctoolchain/usr/bin/cpp "vedi la mia risposta qui sotto. – ZYiOS

7

Per Xcode 6.1, iOS SDK 8.1, io uso qui di seguito script di shell:

Supporto ARMv7, arm64, i686 e 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

Ricevo un errore durante la creazione del file di build. riga 13 di questo script .Per favore fornire tutte le build LAME quindi sarebbe utile.Per favore –

+0

@RahulPatel Che errore hai ricevuto? – ZYiOS

+0

Alcuni file .sh non sono stati trovati. Penso che qualcosa non funzioni con il percorso –