我想在xcode5中重建协议缓冲区staticlib,
在http://code.google.com/p/protobuf/downloads/list下载协议缓冲区
使用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,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"
答案 0 :(得分:2)
我写了一个小的bash脚本,为iOS 7构建Protobuf。可以在这里找到脚本。
https://gist.github.com/BennettSmith/7150245
此脚本将生成适当的Google Protobuf版本,支持i386,armv7,armv7s,arm64和x86_64架构。它将生成一个通用的静态库。它还将生成用于OS X的protoc编译器。
答案 1 :(得分:0)
删除这两行
export CPP="$XcodeCpp"
export CXXCPP="$XcodeCpp"
然后将-isysroot和-arch添加到
export CPPFLAGS="-pipe -no-cpp-precomp -I$SDKROOT/usr/include"
答案 2 :(得分:0)
从上面的脚本中可以看出,您正在尝试为64或32位架构的默认OSX构建protobuf构建不同体系结构(如armv7,armv7s ..etc)的protobuf。哪些可能不支持具有不同cpu架构的ios设备。
为arm架构构建protobuf的步骤:
在运行任何配置脚本之前,请确保已安装 使用默认配置的proto缓冲区(./configure,make和 make install)。
使用" protoc --version "检查protobuf版本确认。如果未找到protoc命令,请检查环境变量。如果您没有在默认位置" / usr / local / bin / protoc"中构建protobuf,则可能会发生这种情况。这一步非常重要,因为我们需要在配置不同架构时在 - with-protoc 变量中传递 protoc 。
转到您解压缩下载的protobuffer的源代码,然后在一些 *。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} /Platforms/MacOSX.platform MACOSX_SYSROOT = $ {MACOSX_PLATFORM} /开发人员/ $ {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} /开发商/软件开发工具包/ $ {SIM_SDK} .sdk
PREFIX = "您的默认位置"
CC =铛 CFLAGS =" -DNDEBUG -g -O0 -pipe -fPIC -fcxx-exceptions" 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-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静态库,您需要在xcode项目中将其用于编译protoc生成的c ++文件