3

xcode5 でプロトコル バッファ staticlib を再構築し、 http://code.google.com/p/protobuf/downloads/list
でプロトコル バッファをダウンロードします 。シェル スクリプトを作成して、iOS 用の glib をビルドしようとします。次のようにします。

export ARCH=arm-apple-darwin10
export ARCH_PREFIX=${ARCH}-
export PLATFORM=iPhoneOS

export SDKVER=7.0
export DEVROOT=/Applications/Xcode.app/Contents/Developer/Platforms/${PLATFORM}.platform/Developer
export SDKROOT="$DEVROOT/SDKs/${PLATFORM}$SDKVER.sdk"

export Toolchains=/Applications/Xcode.app/Contents/Developer/Toolchains
export XcodeClangBin="$Toolchains/XcodeDefault.xctoolchain/usr/bin"
export XcodeCpp="$Toolchains/XcodeDefault.xctoolchain/usr/bin/cpp"

export PKG_CONFIG_PATH="$SDKROOT/usr/lib/pkgconfig:$DEVROOT/usr/lib/pkgconfig"
export AS="$DEVROOT/usr/bin/as"
export ASCPP="$DEVROOT/usr/bin/as"
export AR="$DEVROOT/usr/bin/ar"
export RANLIB="$DEVROOT/usr/bin/ranlib"
export CPP="$XcodeCpp"
export CXXCPP="$XcodeCpp"
export CC="$XcodeClangBin/clang"
export CXX="$XcodeClangBin/clang++"
export LD="$DEVROOT/usr/bin/ld"
export STRIP="$DEVROOT/usr/bin/strip"

export CPPFLAGS="-pipe -no-cpp-precomp -I$SDKROOT/usr/include"
export CFLAGS="-arch armv7 -arch armv7s -fmessage-length=0 -pipe -fpascal-strings -no-cpp-precomp -miphoneos-version-min=5.0 --sysroot='$SDKROOT' -isystem $SDKROOT/usr/include"
export CXXFLAGS="$CFLAGS -I$SDKROOT/usr/include/c++/4.2.1/${ARCH}/v6"
export LDFLAGS="--sysroot='$SDKROOT' -L$SDKROOT/usr/lib -L$SDKROOT/usr/lib/system"

./configure --host=${ARCH} --with-protoc=protoc --enable-static --disable-shared --prefix=/tmp/protobuf/arm
make clean
make
make check
make install

このスクリプトを実行すると、次のように返されます。

#error Unsupported architecture

私に何ができる?

iOS6、xcode 4.6 では、この構成ファイルを使用してビルドできますが、xcode5 では llvm-gcc が削除され、clang を使用して置き換えましたが、失敗しました。

ios6 では、これを使用します

export CPP="$DEVROOT/usr/bin/llvm-cpp-4.2"
export CXXCPP="$DEVROOT/usr/bin/llvm-cpp-4.2"
4

3 に答える 3

0

上記のスクリプトから、(armv7、armv7s ..etc) などのさまざまなアーキテクチャ用の protobuf を構築しようとしていることがわかります。デフォルトでは、OSX は 64 または 32 ビット アーキテクチャ用の protobuf を構築します。CPUアーキテクチャが異なるiOSデバイスではサポートされない場合があります。

arm アーキテクチャの protobuf をビルドする手順:

  • 構成スクリプトを実行する前に、(./configure、make、および make install) を使用して、デフォルト構成で proto バッファーがインストールされていることを確認してください。

  • 確認のために「 protoc --version 」を使用して protobuf のバージョンを確認します。protoc コマンドが見つからない場合は、環境変数を確認してください。これは、protobuf をデフォルトの場所「/usr/local/bin/protoc」にビルドしなかった場合に発生する可能性があります。この手順は重要です。なぜなら、異なるアーキテクチャの設定中に--with-protoc変数でprotocを渡す必要があるからです。

  • ダウンロードしたプロトバッファを解凍したソースに移動し、以下のスクリプトを*.shファイルに入れて実行します。

    XCODEDIR=xcode-select --print-path

    OSX_SDK=$(xcodebuild -showsdks | grep macosx | sort | head -n 1 | awk '{print $NF}') IOS_SDK=$(xcodebuild -showsdks | grep iphoneos | sort | head -n 1 | awk '{print $ NF}') SIM_SDK=$(xcodebuild -showsdks | grep iphonesimulator | sort | head -n 1 | awk '{print $NF}')

    MACOSX_PLATFORM=${XCODEDIR}/プラットフォーム/MacOSX.platform MACOSX_SYSROOT=${MACOSX_PLATFORM}/Developer/${OSX_SDK}.sdk

    IPHONEOS_PLATFORM=${XCODEDIR}/プラットフォーム/iPhoneOS.platform IPHONEOS_SYSROOT=${IPHONEOS_PLATFORM}/Developer/SDKs/iPhoneOS8.1.sdk

    IPHONESIMULATOR_PLATFORM=${XCODEDIR}/Platforms/iPhoneSimulator.platform IPHONESIMULATOR_SYSROOT=${IPHONESIMULATOR_PLATFORM}/Developer/SDKs/${SIM_SDK}.sdk

    PREFIX= 「デフォルトの場所」

    CC=clang CFLAGS="-DNDEBUG -g -O0 -pipe -fPIC -fcxx-exceptions" CXX=clang CXXFLAGS="${CFLAGS} -std=c++11 -stdlib=libc++" LDFLAGS="-stdlib=libc++ " LIBS="-lc++ -lc++abi"

    ./configure --build=x86_64-apple-darwin13.0.0 --host=armv7-apple-darwin13.0.0 --with-protoc=protoc --disable-shared --prefix=${PREFIX} --exec-prefix =${PREFIX}/platform/armv7 "CC=${CC}" "CFLAGS=${CFLAGS} -miphoneos-version-min=8.0 -arch armv7 -isysroot ${IPHONEOS_SYSROOT}" "CXX=${CXX}" "CXXFLAGS=${CXXFLAGS} -arch armv7 -isysroot ${IPHONEOS_SYSROOT}" LDFLAGS="-arch armv7 -miphoneos-version-min=8.0 ${LDFLAGS}" "LIBS=${LIBS}"

  • 次に、make と make install を実行します。

  • これで、 ${PREFIX}/platform/arvm7/libの場所に新しい libprotobuf.a スタティック ライブラリが作成されます。このライブラリは、protoc で生成された C++ ファイルをコンパイルするために xcode プロジェクトに含める必要があります。

于 2014-11-13T09:43:07.520 に答える
0

それらの2行を削除します

export CPP="$XcodeCpp"
export CXXCPP="$XcodeCpp"

次に、-isysroot と -arch を追加します

export CPPFLAGS="-pipe -no-cpp-precomp -I$SDKROOT/usr/include"
于 2013-10-02T11:13:30.807 に答える