如何为iPhone的armv6和armv7将la脚编译为静态库(.a)? [英] How can I compile lame as static library(.a) for armv6 and armv7 of iPhone?
问题描述
LAME(http://lame.sourceforge.net/)是用C语言编写的库.它可以将PCM声音文件转换为MP3文件.我用它将声音文件转换为iPhone上的MP3文件.源PCM声音文件是通过麦克风录制的.
LAME(http://lame.sourceforge.net/) is a library written in c language. It can convert PCM sound files to MP3 files. I use it to convert sound files to MP3 files on iPhone. The source PCM sound files is recorded by microphone.
为了将LAME包含到我的XCode项目中,我需要将LAME编译为3个静态库(.a),用于i386(IOS Simulator),armv6和armv7.
In order to include the LAME into my XCode Project, I need to compile the LAME to 3 static libraries(.a), for i386(IOS Simulator), armv6 and armv7.
经过大量搜索,我成功地为i368版本(iOS Simulator)编译了一个静态库.这是命令:
After a lot of search, I have complied a static library for i368 version(iOS Simulator) successfully. Here is commands:
./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
问题是我无法为armv6和armv7进行编译.我已经尝试过此命令,但是它报告错误.有没有人有解决方案?
The problem is I can not compile for armv6 and armv7. I have tried this commands but it report an error. Is there anybody have solutions?
./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
错误是:
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
当我安装ncurses时,它报告了这一点:
When I install ncurses, It reported this:
../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’
有人可以给我一种将arm编译为armv6和armv7的静态库(.a)的方法吗?
Is there somebody can give me a way to compile LAME to static library(.a) for the armv6 and armv7?
推荐答案
您缺少一些步骤.首先,您根本不想构建前端,因为无论如何您只能将LAME用作库.您还必须静态地构建库,否则将无法将其构建到项目中.
You're missing a few steps. First of all you don't want to build the frontend at all since you'll only be able to use LAME as a library anyhow. You also have to build the library statically otherwise you won't be able to build it into your project.
基本上,您必须设置源代码树并将其编译四次,一次用于模拟器(i686),iPhone(armv6),iPad(armv7)和iPhone 5(armv7s),然后将.a文件打包为一个通用图书馆.当您编译项目的其余部分时,Xcode链接器将为您整理其他所有内容.
Basically, you have to setup the source tree and compile it four times, once for the simulator (i686), iPhone (armv6), iPad (armv7) and iPhone 5 (armv7s) then lipo the .a files together into a universal library. The Xcode linker will sort everything else out for you when you compile the rest of your project.
我使用此shell脚本构建了通用的libmp3lame.a文件.请注意,这使用Xcode 4.3路径和iOS 5.1编译器.
I used this shell script to build a universal libmp3lame.a file. Note this uses Xcode 4.3 paths and iOS 5.1 compilers.
#!/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
将./build中的libmp3lame.a文件与包含目录中的lame.h文件一起放入Xcode项目中,您应该已经准备好在模拟器或真实设备中使用lame.
Take the libmp3lame.a file from ./build along with the lame.h file from the include directory and drop them in your Xcode project and you should be ready to use lame in either the simulator or a real device.
这篇关于如何为iPhone的armv6和armv7将la脚编译为静态库(.a)?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!