how to build protocol buffer for iOS7?

不问归期 提交于 2020-01-14 14:55:28

问题


I want to rebuild protocol buffer staticlib in xcode5 ,
download protocol buffer in http://code.google.com/p/protobuf/downloads/list use autogen.sh , I get a configure file, can make and install on mac, I write a shell script try to build glib for iOS, as blow :

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

When I run this script, return as :

#error Unsupported architecture

What can I do?

in ios6, xcode 4.6, i can use this configure file to build, but in xcode5, llvm-gcc has removed, i use clang to replace it, but is failed.

in ios6 , use this

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

回答1:


I wrote a small bash script that builds Protobuf for iOS 7. The script can be found here.

https://gist.github.com/BennettSmith/7150245

This script will produce a proper build of Google Protobuf that supports the i386, armv7, armv7s, arm64 and x86_64 architectures. It will produce a static library that is universal. It will also produce the protoc compiler for use on OS X.




回答2:


remove those two lines

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

then add -isysroot and -arch to

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



回答3:


From the above script its understood that you are trying to build protobuf for different architectures like (armv7, armv7s ..etc) by default OSX build protobuf for 64 or 32 bit architecture. Which may not support in ios devices which have different cpu architecture.

Steps to build protobuf for arm architecture:

  • Before running any configure scripts make sure you have installed proto buffer with default configuration using (./configure, make and make install).

  • Check for protobuf version using "protoc --version" for confirmation. If protoc command not found check for environmental variable. This may happen when you didn't build protobuf in default location "/usr/local/bin/protoc". This step is important since we need to pass protoc in --with-protoc variable while configuring for different architecture.

  • Go to the source where you unzipped your downloaded protobuffer and run the below script by having it in some *.sh file.

    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}/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

    PREFIX="your default location"

    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}"

  • Then run make and make install.

  • Now you will have new libprotobuf.a static library in ${PREFIX}/platform/arvm7/lib location which you need to have it in your xcode project for compiling protoc generated c++ file.



来源:https://stackoverflow.com/questions/18995051/how-to-build-protocol-buffer-for-ios7

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!