返回首页
当前位置: 主页 > 手机mobile >

libzzip.a文件编译一个iphone 版

时间:2010-08-04 11:32来源:未知 作者:sam.huang 点击:
最近在搞iphone上的电子书,需要把电子书为zip格式的解压,然后在google后发现了libzzip这个库,加进工程,模拟器上编译通过,但在真机测试,报错: libzzip.a is not of required architecture. 排查很久还是
  

最近在搞iphone上的电子书,需要把电子书为zip格式的解压,然后在google后发现了libzzip这个库,加进工程,模拟器上编译通过,但在真机测试,报错:libzzip.a is not of required architecture.

排查很久还是不知道原因,最后问了一个大牛,他说是libzzip.a不是iphone armv6.7的使用的,要编译一个armv 6的,所以着手开始编译,困难重重.本身touchxml里面就有shell脚本,但直接编译报错:在target下面找到run script这个文件,打开,代码是这样的:

 if [ -d "$SRCROOT/DONTBUILD"]; then
exit 0
fi
if [ $PLATFORM_NAME == "iphonesimulator" ]; then
TARGET=device
fi
echo $TARGET
OUTPUT_DIR="$SRCROOT/Externals/zzip/Output"

#rm -rf "$OUTPUT_DIR/*"
cd "$SRCROOT/Externals/zzip/zziplib"
$SRCROOT/Scripts/build_for_iphoneos.sh -p "$OUTPUT_DIR" "$TARGET" 2> /dev/null

 直接在bash shell中跑这段代码是跑不了的,会有一堆的错误,为把这些错去掉,就尽量简化它(a.sh)

SRCROOT="your project absolute path"
TARGET=device
OUTPUT_DIR="$SRCROOT/Externals/zzip/Output"
cd "$SRCROOT/Externals/zzip/zziplib"
$SRCROOT/Scripts/build_for_iphoneos.sh -p "$OUTPUT_DIR" "$TARGET" 2> /dev/null

这样简化后,这个shell是可以跑出,但在这里面调用的那个build_for_iphoneos.sh这个脚本无法产生结果,也还要修改这个sh.

修改后如下:

  # Disallow undefined variables
set -u
default_gcc_version=4.2

//iphone 3.2之前是3.1.2
default_iphoneos_version=3.2

//用与你电脑相对应的系统版本
default_macos_version=10.6

GCC_VERSION="${GCC_VERSION:-$default_gcc_version}"
export IPHONEOS_DEPLOYMENT_TARGET="${IPHONEOS_DEPLOYMENT_TARGET:-$default_iphoneos_version}"
export MACOSX_DEPLOYMENT_TARGET="${MACOSX_DEPLOYMENT_TARGET:-$default_macos_version}"
usage ()
{
    cat >&2 << EOF
Usage: ${0##*/} [-ht] [-p prefix] target [configure_args]
    -h    Print help message
    -p    Installation prefix (default: \$HOME/Developer/Platforms/...)
    -t    Use 16-bit Thumb instruction set (instead of 32-bit ARM)
The target must be "device" or "simulator".  Any additional arguments
are passed to configure.
The following environment variables affect the build process:
    GCC_VERSION            (default: $default_gcc_version)
    IPHONEOS_DEPLOYMENT_TARGET    (default: $default_iphoneos_version)
    MACOSX_DEPLOYMENT_TARGET    (default: $default_macos_version)
EOF
}
while getopts ":hp:t" opt; do
    case $opt in
    h  ) usage ; exit 0 ;;
    p  ) prefix="$OPTARG" ;;
    t  ) thumb_opt=thumb ;;
    \? ) usage ; exit 2 ;;
    esac
done
shift $(( $OPTIND - 1 ))
if (( $# < 1 )); then
    usage
    exit 2
fi
target=$1
shift
case $target in
    device )

#用armv7,之前是armv6
    arch=armv7
    platform=iPhoneOS
    extra_cflags="-m${thumb_opt:-no-thumb} -mthumb-interwork"
    ;;
    simulator )
    arch=i386
    platform=iPhoneSimulator
    extra_cflags="-D__IPHONE_OS_VERSION_MIN_REQUIRED=${IPHONEOS_DEPLOYMENT_TARGET%%.*}0000"
    ;;
    * )
    usage
    exit 2
esac
platform_dir="/Developer/Platforms/${platform}.platform/Developer"
platform_bin_dir="${platform_dir}/usr/bin"
platform_sdk_dir="${platform_dir}/SDKs/${platform}${IPHONEOS_DEPLOYMENT_TARGET}.sdk"
prefix="${prefix:-${HOME}${platform_sdk_dir}}"
export CC="${platform_bin_dir}/gcc-${GCC_VERSION}"
export CFLAGS="-arch ${arch} -pipe -Os -gdwarf-2 -isysroot ${platform_sdk_dir} ${extra_cflags}"
export LDFLAGS="-arch ${arch} -isysroot ${platform_sdk_dir}"
export CXX="${platform_bin_dir}/g++-${GCC_VERSION}"
export CXXFLAGS="${CFLAGS}"
export CPP="/Developer/usr/bin/cpp-${GCC_VERSION}"
export CXXCPP="${CPP}"
./configure \
    --prefix="${prefix}" \
    --host="${arch}-apple-darwin" \
    --disable-shared \
    --enable-static \
    "$@" || exit
make install || exit
cat >&2 << EOF
Build succeeded!  Files were installed in
  $prefix
EOF

这时开始./a.sh时候就能正确无误的产生libzzip.a的iphone版本.

顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------
最新评论 查看所有评论
发表评论 查看所有评论
发布者资料
amw 查看详细资料 发送留言 加为好友 用户等级:高级会员 注册时间:2009-03-30 13:03 最后登录:2012-01-17 11:01
推荐内容