使用Xcode5.1错误编译iOS版libspeex

另请参阅: 使用Xcode5.1错误编译iOS的libogg

环境:Mac OS X 10.9.2,Xcode 5.1。

有两个用于构建libogg和libspeex的shell脚本,它们位于同一目录中。 libogg构建脚本如下:

#!/bin/sh set -xe VERSION="1.3.1" BUILDDIR=`pwd` DESTDIR="libogg-built" ARCHS="i386 x86_64 armv7 armv7s arm64" rm -rf $DESTDIR mkdir $DESTDIR if [ ! -e "libogg-$VERSION.zip" ]; then curl -LO http://downloads.xiph.org/releases/ogg/libogg-$VERSION.zip fi unzip -oq libogg-$VERSION.zip cd libogg-$VERSION ./configure for ARCH in $ARCHS; do mkdir -p ../$DESTDIR/$ARCH make distclean IOSMV="-miphoneos-version-min=4.3" case $ARCH in arm*) if [ $ARCH == "arm64" ]; then IOSMV="-miphoneos-version-min=7.0" fi PATH=`xcodebuild -version -sdk iphoneos PlatformPath`"/Developer/usr/bin:$PATH" \ SDK=`xcodebuild -version -sdk iphoneos Path` \ CC="xcrun --sdk iphoneos clang -arch $ARCH $IOSMV --sysroot=$SDK -isystem $SDK/usr/include" \ CXX="xcrun --sdk iphoneos clang++ -arch $ARCH $IOSMV --sysroot=$SDK -isystem $SDK/usr/include" \ LDFLAGS="-Wl,-syslibroot,$SDK" \ ./configure \ --host=arm-apple-darwin \ --prefix=$BUILDDIR/$DESTDIR/$ARCH ;; *) PATH=`xcodebuild -version -sdk iphonesimulator PlatformPath`"/Developer/usr/bin:$PATH" \ CC="xcrun --sdk iphonesimulator clang -arch $ARCH $IOSMV" \ CXX="xcrun --sdk iphonesimulator clang++ -arch $ARCH $IOSMV" \ ./configure \ --prefix=$BUILDDIR/$DESTDIR/$ARCH ;; esac make make install done make distclean cd .. mkdir -p $DESTDIR/universal/lib INPUT="" for ARCH in $ARCHS; do INPUT="$INPUT $DESTDIR/$ARCH/lib/libogg.a" done lipo -create $INPUT -output $DESTDIR/universal/lib/libogg.a 

在终端中运行脚本,并成功编译了libogg。 然后运行libspeex脚本,如下所示:

 #!/bin/sh set -xe VERSION="1.2rc1" BUILDDIR=`pwd` OGGDIR="libogg-built" DESTDIR="libspeex-built" LIBS="libspeex.a libspeexdsp.a" ARCHS="i386 x86_64 armv7 armv7s arm64" rm -rf $DESTDIR mkdir $DESTDIR if [ ! -e "speex-$VERSION.tar.gz" ]; then curl -LO http://downloads.xiph.org/releases/speex/speex-$VERSION.tar.gz fi tar zxf speex-$VERSION.tar.gz cd speex-$VERSION ./configure for ARCH in $ARCHS; do mkdir -p ../$DESTDIR/$ARCH make distclean IOSMV="-miphoneos-version-min=4.3" case $ARCH in arm*) if [ $ARCH == "arm64" ]; then IOSMV="-miphoneos-version-min=7.0" fi PATH=`xcodebuild -version -sdk iphoneos PlatformPath`"/Developer/usr/bin:$PATH" \ SDK=`xcodebuild -version -sdk iphoneos Path` \ CC="xcrun --sdk iphoneos clang -arch $ARCH $IOSMV --sysroot=$SDK -isystem $SDK/usr/include" \ CXX="xcrun --sdk iphoneos clang++ -arch $ARCH $IOSMV --sysroot=$SDK -isystem $SDK/usr/include" \ LDFLAGS="-Wl,-syslibroot,$SDK" \ ./configure \ --host=arm-apple-darwin \ --prefix=$BUILDDIR/$DESTDIR/$ARCH \ --with-ogg=$BUILDDIR/$OGGDIR/$ARCH ;; *) PATH=`xcodebuild -version -sdk iphonesimulator PlatformPath`"/Developer/usr/bin:$PATH" \ CC="xcrun --sdk iphonesimulator clang -arch $ARCH $IOSMV" \ CXX="xcrun --sdk iphonesimulator clang++ -arch $ARCH $IOSMV" \ ./configure \ --prefix=$BUILDDIR/$DESTDIR/$ARCH \ --with-ogg=$BUILDDIR/$OGGDIR/$ARCH ;; esac make make install done make distclean cd .. mkdir -p $DESTDIR/universal/lib for LIB in $LIBS; do INPUT="" for ARCH in $ARCHS; do INPUT="$INPUT $DESTDIR/$ARCH/lib/$LIB" done lipo -create $INPUT -output $DESTDIR/universal/lib/$LIB done 

它说./build-libspeex.sh: line 55: --with-ogg=/Users/Smeegol/Desktop/Speex/libogg-built/i386: No such file or directory ,为什么i386无法定位,它已被在上一步创建?!

它说./build-libspeex.sh:第55行:–with-ogg = / Users / Smeegol / Desktop / Speex / libogg-built / i386:没有这样的文件或目录,为什么i386无法定位,它已被在上一步创建?!

它引用/ Users / Smeegol / Desktop / Speex / libogg-built / i386 ,但在上一步中……

lipo -create $ INPUT -output $ DESTDIR / universal / lib / libogg.a

…我在路径名称中看到了普遍性

libogg安装的输出目录应如下所示:

 ${OGGDIR}/lib/libogg.a ${OGGDIR}/include/ 

最后,您的其他问题也有类似的错误:

 PATH=`xcodebuild -version -sdk iphonesimulator PlatformPath`"/Developer/usr/bin:$PATH" \ CC="xcrun --sdk iphonesimulator clang -arch $ARCH $IOSMV" \ CXX="xcrun --sdk iphonesimulator clang++ -arch $ARCH $IOSMV" \ ./configure \ --prefix=$BUILDDIR/$DESTDIR/$ARCH --with-ogg=$BUILDDIR/$OGGDIR/$ARCH 

…在–prefix行后面缺少“\”。

您可以参考https://github.com/firstfan/libspeex-iOS

它使用最新的SDK和最新的speex代码编译好

它开箱即用。