【问题标题】:Compile libogg for iOS using Xcode5.1 error使用 Xcode5.1 为 iOS 编译 libogg 错误
【发布时间】:2014-04-15 16:26:30
【问题描述】:

环境:Mac OS X 10.9.2、Xcode 5.1。构建shell脚本如下:

#!/bin/sh

set -xe

VERSION="1.3.1"
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

    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=../$DESTDIR/$ARCH
        ;;
    *)
        PATH=`xcodebuild -version -sdk iphonesimulator PlatformPath`"/Developer/usr/bin:$PATH" \
        #SDK=`xcodebuild -version -sdk iphonesimulator Path` \
        CC="xcrun --sdk iphonesimulator clang -arch $ARCH $IOSMV" \
        CXX="xcrun --sdk iphonesimulator clang++ -arch $ARCH $IOSMV" \
        ./configure \
        #--host=x86_64-apple-darwin \
        --prefix=../$DESTDIR/$ARCH
        ;;
    esac

    make
    make install
    make clean
done

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

但终端记录:

+ VERSION=1.3.1
+ DESTDIR=libogg-built
+ ARCHS=i386
+ rm -rf libogg-built
+ mkdir libogg-built
+ '[' '!' -e libogg-1.3.1.zip ']'
+ unzip -oq libogg-1.3.1.zip
+ cd libogg-1.3.1
+ ./configure
+ for ARCH in '$ARCHS'
+ mkdir -p ../libogg-built/i386
+ IOSMV=-miphoneos-version-min=4.3
+ case $ARCH in
++ xcodebuild -version -sdk iphonesimulator PlatformPath
+ PATH=/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneSimulator.platform/Developer/usr/bin:/opt/local/bin:/opt/local/sbin:/Users/Smeegol/.rbenv/shims:/Users/Smeegol/.rbenv/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin
+ CC='xcrun --sdk iphonesimulator clang -arch i386 -miphoneos-version-min=4.3'
+ CXX='xcrun --sdk iphonesimulator clang++ -arch i386 -miphoneos-version-min=4.3'
+ ./configure
+ --prefix=../libogg-built/i386
./build-libogg2.sh: line 55: --prefix=../libogg-built/i386: No such file or directory

为什么是“--prefix=../libogg-built/i386: No such file or directory”?它已经被创建了。

更新:新的正确的shell脚本如下:

#!/bin/sh

set -xe

VERSION="1.3.1"
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

    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=../$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=../$DESTDIR/$ARCH
        ;;
    esac

    make
    make install
    make clean
done

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

【问题讨论】:

    标签: ios xcode macos ogg speex


    【解决方案1】:

    --prefix=../$DESTDIR/$ARCH

    您的相对路径可能存在问题。使用安装根目录的完整路径通常会更好(如果不是更容易的话)。

    如果这是问题,您可以尝试的一件事是扩展路径并重试......例如

    export INSTALL_ROOT=$(cd ../libogg-built/i386; pwd)
    ./configure ...
    ...
    --prefix="${INSTALL_ROOT}"
    

    如果有帮助,请告诉我们!配置脚本可能非常挑剔。

    更新:没关系,在这种情况下,我在第一次点击提交后才意识到要简单得多:

        CXX="xcrun --sdk iphonesimulator clang++ -arch $ARCH $IOSMV" \
        ./configure \
        #--host=x86_64-apple-darwin \
        --prefix=../$DESTDIR/$ARCH
        ;;
    

    ...当您将命令继续到多行时,您不能有#-to-end-of-line 注释。只需删除 #--host=x86_64-apple-darwin \ 即可设置。

    【讨论】:

    • 是的,你是对的!我已将前缀更改为完整路径并删除评论。现在可以了!非常感谢。
    • 我已经更新了我的 shell 脚本。它运行正确,但仍有一些警告:“配置:警告:如果您想设置 --build 类型,请不要使用 --host。如果检测到交叉编译器,则将使用交叉编译模式配置:警告:使用不以主机三元组为前缀的交叉工具”,你知道为什么吗? “--host=arm-apple-darwin \”应该被删除吗?
    • 在配置脚本中查找--arch--host,甚至--cross-compile 类型选项。 (看起来您正在 CC 和 CXX 变量中设置拱门)。每个配置脚本都可以不同。可能需要其中一个或多个选项来允许主机(您的 Mac)交叉编译 iOS(armv7、avrmv7s、arm64)。我在这里有一个 FFmpeg iOS 构建脚本 - github.com/greymouser/ffmpeg-build-ios/blob/master/… - 它可能会给你一些见解。但是,libogg 的配置脚本必然与 FFmpeg 的不同——所以只是作为参考。
    • 你能看看我的另一个与此相关的问题吗? stackoverflow.com/questions/23104759/…
    【解决方案2】:

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

    用最新的SDK和最新的speex代码编译OK

    【讨论】:

    • 应该是评论。
    • @Evan 您的构建脚本非常有帮助!我遇到了一个非常奇怪的问题,我的 pcre 库在升级到 XCode 7 beta 后突然拒绝为模拟器工作,它有 i386、x86_64、armv6、armv7 和 arm64 的切片。虽然它可以看到 x86_64 和 i386 切片,但它表示它们是为 OSX 而不是 iOS 构建的。您的构建脚本显然“正确”地构建了它们并且它再次开始工作。真的救了我!
    猜你喜欢
    • 2014-06-02
    • 1970-01-01
    • 2011-11-11
    • 2012-07-27
    • 1970-01-01
    • 2019-04-04
    • 1970-01-01
    • 2012-12-06
    • 2014-03-25
    相关资源
    最近更新 更多