如何为iOS7构建协议缓冲区?

如何为iOS7构建协议缓冲区?,ios7,protocol-buffers,xcode5,Ios7,Protocol Buffers,Xcode5,我想在xcode5中重建协议缓冲区staticlib, 在中下载协议缓冲区 使用autogen.sh,我得到一个配置文件,可以在mac上制作和安装,我编写一个shell脚本,尝试为iOS构建glib,如下所示: export ARCH=arm-apple-darwin10 export ARCH_PREFIX=${ARCH}- export PLATFORM=iPhoneOS export SDKVER=7.0 export DEVROOT=/Applications/Xcode.app/Co

我想在xcode5中重建协议缓冲区staticlib,
在中下载协议缓冲区 使用autogen.sh,我得到一个配置文件,可以在mac上制作和安装,我编写一个shell脚本,尝试为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,xcode4.6中,我可以使用这个配置文件来构建,但是在xcode5中,llvmgcc已经被删除,我使用clang来替换它,但是失败了

在ios6中,使用

export CPP="$DEVROOT/usr/bin/llvm-cpp-4.2"
export CXXCPP="$DEVROOT/usr/bin/llvm-cpp-4.2"
删除这两条线

export CPP="$XcodeCpp"
export CXXCPP="$XcodeCpp"
然后将-isysroot和-arch添加到

export CPPFLAGS="-pipe -no-cpp-precomp -I$SDKROOT/usr/include"

我编写了一个小bash脚本,为ios7构建Protobuf。脚本可以在这里找到


此脚本将生成支持i386、armv7、armv7s、arm64和x86_64体系结构的Google Protobuf的正确构建。它将生成一个通用的静态库。它还将生成在OS X上使用的protoc编译器。

根据上面的脚本,您将尝试为不同的体系结构构建protobuf,例如(armv7、armv7s..等),默认情况下,OSX为64位或32位体系结构构建protobuf。在具有不同cpu体系结构的ios设备中可能不支持

为arm架构构建protobuf的步骤:

  • 在运行任何配置脚本之前,请确保已安装 使用(./configure、make和 进行安装)

  • 使用“protoc--version”检查protobuf版本以进行确认。如果找不到protoc命令,请检查环境变量。当您没有在默认位置“/usr/local/bin/protoc”中构建protobuf时,可能会发生这种情况。这一步很重要,因为在配置不同的体系结构时,我们需要在中使用protoc变量传递protoc

  • 转到解压下载的protobuffer的源代码,将其保存在某个*.sh文件中,运行下面的脚本

    XCODEDIR=
    xcode选择--打印路径

    OSX|U SDK=$(xcodebuild-showsdks | grep macosx | sort | head-n1 | awk'{print$NF}') IOS|U SDK=$(xcodebuild-showsdks | grep iphoneos | sort | head-n1 | awk'{print$NF}') SIM|u SDK=$(xcodebuild-showsdks | grep iphonesimulator | sort | head-n1 | awk'{print$NF}')

    MACOSX_PLATFORM=${XCODEDIR}/Platforms/MACOSX.PLATFORM MACOSX_SYSROOT=${MACOSX_PLATFORM}/Developer/${OSX_SDK}.SDK

    IPHONEOS_PLATFORM=${XCODEDIR}/Platforms/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

    前缀=“您的默认位置”

    CC=叮当声 CFLAGS=“-DNDEBUG-g-O0-pipe-fPIC-fcxx异常” CXX=叮当声 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版本min=8.0-arch armv7-isysroot${IPHONEOS\u SYSROOT}“CXX$={cxflags}”${IPHONEOS_SYSROOT}“LDFLAGS=“-arch armv7-miphoneos version min=8.0${LDFLAGS}”LIBS=${LIBS}”

  • 然后运行make和makeinstall

  • 现在您将有新的LIbProtoBFF。在强> ${Prime}/Stuts/ARVM7/LIB <强>位置中的静态库,您需要在XCODEL项目中编译它来编译PoToc生成的C++文件。


我认为iOS是在ARM架构上运行的。如果下载的代码不支持这一点,那么你可能就走运了。在xcode 4.6、ios6.1中,我可以使用此配置文件进行构建,在xcode 5中,llvm gcc已删除,因此我使用clang替换它,但失败了。现在可以使用更新版本的脚本进行构建使用Xcode 6的Google Protobuf 2.6.0。此版本包含arm64的构建,这在2.5.0版本中是不可能的。您可以在此处找到更新的脚本: