After four days of hard work, I finally completed the cross-Compilation of protobuf2.5.0 on xcode. I hope that my colleagues who encountered the same problems will not be confused. Share as follows:
Step 1: deploy protoc.exe
1) sudo su --- enter the Management Mode
// Perform the following operations to switch to the protobuf Folder:
2)./configure
3) make
4) make check
5) make install
In this case, you can view the makefile file under the protobuf folder, and view the local environment represented by-build and the runtime environment of the compiled library represented by-host.
My local-build = x86_64-apple-darwin12.3.0
-Host = x86_64-apple-darwin12.3.0
These two parameters need to be used in subsequent configuration scripts, consistent with the i686-apple-darwin12.3.0 in the footsteps and the arm-apple-darwin12.3.0 suffix "arm-apple-darwin12.3.0)
6) make distclean clean the generated makefile to prepare for cross-compilation and configuration of the new makefile
Step 2: Configure cross-Compilation
1) execute the script ios-build.sh, the script content is as follows:
Configure_for_platform (){
Export PLATFORM = $1
# Export PLATFORM = iPhoneOS
Echo "Platform is $ {PLATFORM }"
If ["$ PLATFORM" = "iPhoneSimulator"]; then
Export ARCHITECTURE = i386
Export ARCH = i686-apple-darwin12.3.0
Fi
If ["$ PLATFORM" = "iPhoneOS"]; then
Export ARCHITECTURE = $2
Export ARCH = arm-apple-darwin12.3.0
Fi
Export ARCH_PREFIX = $ ARCH-
Export SDKVER = "6.1" # the sdk version must be correct
Export DEVROOT =/Applications/Xcode. app/Contents/Developer/Platforms/$ {PLATFORM}. platform/Developer
Export SDKROOT = "$ DEVROOT/SDKs/$ {PLATFORM} $ SDKVER. sdk"
Export PKG_CONFIG_PATH = "$ SDKROOT/usr/lib/pkgconfig: $ DEVROOT/usr/lib/pkgconfig"
Export AS = "$ DEVROOT/usr/bin/"
Export ASCPP = "$ DEVROOT/usr/bin/"
Export AR = "$ DEVROOT/usr/bin/ar"
Export RANLIB = "$ DEVROOT/usr/bin/ranlib"
# Export CPP = "$ DEVROOT/usr/bin/c ++"
# Export CXXCPP = "$ DEVROOT/usr/bin/c ++"
Export CC = "$ DEVROOT/usr/bin/gcc"
Export CXX = "$ DEVROOT/usr/bin/g ++"
Export LD = "$ DEVROOT/usr/bin/ld"
Export STRIP = "$ DEVROOT/usr/bin/strip"
Export LIBRARY_PATH = "$ SDKROOT/usr/lib"
Export CPPFLAGS = ""
# Export CFLAGS = "-arch armv7-fmessage-length = 0-pipe-fpascal-strings-miphoneos-version-min = 4.0-isysroot = $ SDKROOT-I $ SDKROOT/usr/ include-I $ SDKROOT/usr/include/c ++/4.2.1 /"
Export CFLAGS = "-arch $ {ARCHITECTURE}-fmessage-length = 0-pipe-fpascal-strings-miphoneos-version-min = 4.0-isysroot = $ SDKROOT-I $ SDKROOT/ usr/include-I $ SDKROOT/usr/include/c ++/4.2.1 /"
Export CXXFLAGS = "$ CFLAGS"
# Export LDFLAGS = "-isysroot = '$ sdkroot'-L $ SDKROOT/usr/lib/system-L $ SDKROOT/usr/lib /"
Export LDFLAGS = "-arch $ {ARCHITECTURE}-isysroot = '$ sdkroot'-L $ SDKROOT/usr/lib/system-L $ SDKROOT/usr/lib /"
./Configure -- host =$ {ARCH} -- with-protoc = protoc -- enable-static -- disable-shared
}
Mkdir ios-build
# Build for iPhoneSimulator
Configure_for_platform iPhoneSimulator
Make clean
Make
Cp src/. libs/libprotobuf-lite.a for ios-build/libprotobuf-lite-i386.a
# Extract the complete version (i386)
Cp src/. libs/libprotobuf. a ios-build/libprotobuf-i386.a
# Build for iPhone OS armv7
Configure_for_platform iPhoneOS armv7
Make clean
Make
Cp src/. libs/libprotobuf-lite.a for ios-build/libprotobuf-lite-armv7.a
# Extract the complete version (armv7)
Cp src/. libs/libprotobuf. a ios-build/libprotobuf-armv7.a
# Build for iPhone OS armv7s
Configure_for_platform iPhoneOS armv7s
Make clean
Make
Cp src/. libs/libprotobuf-lite.a for ios-build/libprotobuf-lite-armv7s.a
# Extract the complete version (armv7s)
Cp src/. libs/libprotobuf. a ios-build/libprotobuf-armv7s.a
Make clean
# Cerate a fat library containing all achitectures in libprotobuf-lite.a
Xcrun-sdk iphoneos lipo-arch armv7 ios-build/libprotobuf-lite-armv7.a-arch armv7s ios-build/libprotobuf-lite-armv7s.a-arch i386 ios-build/libprotobuf-lite-i386.a-create-output ios-build/libprotobuf-lite.a
# Merge three full versions of libprotobuf.)
Xcrun-sdk iphoneos lipo-arch armv7 ios-build/libprotobuf-armv7.a-arch armv7s ios-build/libprotobuf-armv7s.a-arch i386 ios-build/libprotobuf-i386.a-create-output ios-build/libprotobuf.
2) copy the packaged libprotobuf-lite.a and libprotobuf. a to the Project for compilation, You can compile protobuf in xcode Simulator version and real machine version, complete the cross-compilation.