8

这是对之前关于 iPhone 交叉编译的问题的跟进:
为官方 iPhone SDK 交叉编译基于 Autotools 的库

基本上,我正在尝试为 iPhone 编译 Apache Portable Runtime (APR) 版本 1.3.8(最新)。我目前在配置步骤中遇到以下错误:

检查工作的 PROCESS_SHARED 锁...配置:错误:在“/Users/michaelsafyan/Downloads/apr-1.3.8”中:
配置:错误:交叉编译时无法运行测试程序
更多细节见“config.log”。

我正在通过“iphone3.1-configure --disable-dso --enable-threads”调用“configure”脚本,其中“iphone3.1-configure”是我为调用“配置”脚本:

#!/bin/bash

#
# 程序:iphone3.1-configure
# 作者:Michael Aaron Safyan (michaelsafyan@gmail.com)
# 简介:
# 这个程序运行由
# GNU Autotools 用于交叉编译第三方库
# 适用于 iPhone 3.1 SDK。在目录中运行此脚本
# 包含一个自动工具“配置”脚本。一旦你运行这个,
# 你可以使用“make”和“sudo make install”来构建库。
# 使用“/opt/iphone-3.1/”的安装前缀。
#

未设置 CPATH
取消设置 C_INCLUDE_PATH
取消设置 CPLUS_INCLUDE_PATH
取消设置 OBJC_INCLUDE_PATH
未设置的 LIBS
取消设置 DYLD_FALLBACK_LIBRARY_PATH
取消设置 DYLD_FALLBACK_FRAMEWORK_PATH

导出 BUILD_DARWIN_VER=`uname -r`
导出 SDKVER="3.1"
导出 DEVROOT="/Developer/Platforms/iPhoneOS.platform/Developer"
导出 SDKROOT="$DEVROOT/SDKs/iPhoneOS$SDKVER.sdk"
export PKG_CONFIG_PATH=/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS$SDKVER.sdk/usr/lib/pkgconfig:/Developer/Platforms/iPhoneOS.platform/Developer/usr/lib/pkgconfig:/opt/iphone- $SDKVER/lib/pkgconfig:/usr/local/iphone-$SDKVER/lib/pkgconfig
出口前缀="/opt/iphone-$SDKVER"
导出 AS="$DEVROOT/usr/bin/as"
出口 ASPP="$DEVROOT/usr/bin/as"
出口 AR="$DEVROOT/usr/bin/ar"
出口 RANLIB="$DEVROOT/usr/bin/ranlib"
export CPPFLAGS="-pipe -no-cpp-precomp -I$SDKROOT/usr/lib/gcc/arm-apple-darwin9/4.2.1/include/ -I$SDKROOT/usr/include -I$DEVROOT/usr/包括 -I/opt/iphone-$SDKVER/include -I/usr/local/iphone-$SDKVER/include"
export CFLAGS="-std=c99 -arch armv6 -pipe -no-cpp-precomp --sysroot='$SDKROOT' -isystem $SDKROOT/usr/lib/gcc/arm-apple-darwin9/4.2.1/include/ -isystem $SDKROOT/usr/include -isystem $DEVROOT/usr/include -isystem /opt/iphone-$SDKVER/include -isystem /usr/local/iphone-$SDKVER/include"
export CXXFLAGS="-std=c99 -arch armv6 -pipe -no-cpp-precomp --sysroot='$SDKROOT' -isystem $SDKROOT/usr/lib/gcc/arm-apple-darwin9/4.2.1/include/ -isystem $SDKROOT/usr/include -isystem $DEVROOT/usr/include -isystem /opt/iphone-$SDKVER/include -isystem /usr/local/iphone-$SDKVER/include"
export LDFLAGS="-arch armv6 --sysroot='$SDKROOT' -L$SDKROOT/usr/lib -L$DEVROOT/usr/lib -L/opt/iphone-$SDKVER/lib -L/usr/local/iphone -$SDKVER/lib"
导出 CPP="$DEVROOT/usr/bin/cpp"
导出 CXXCPP="$DEVROOT/usr/bin/cpp"
出口 CC="$DEVROOT/usr/bin/gcc-4.2"
导出 CXX="$DEVROOT/usr/bin/g++-4.2"
导出 LD="$DEVROOT/usr/bin/ld"
导出 STRIP="$DEVROOT/usr/bin/strip"

如果 [ !\( -d "$DEVROOT" \) ] ; 然后
   echo "找不到 iPhone SDK。文件夹 \"$DEVROOT\" 不存在。"
   1号出口
菲

如果 [ !\( -d "$SDKROOT" \) ] ; 然后
   echo "找不到 iPhone SDK。文件夹 \"$SDKROOT\" 不存在。"
   1号出口
菲

./configure --prefix="$PREFIX" --build="i386-apple-darwin$BUILD_DARWIN_VER" --host="arm-apple-darwin9" --enable-static --disable-shared ac_cv_file__dev_zero=no ac_cv_func_setpgrp_void=是 $@

configure 给我的错误并不是我第一次收到类似“交叉编译时无法运行测试程序”的消息。事实上,“iphone3.1-configure”脚本中的“ac_cv_file__dev_zero=no”和“ac_cv_func_setpgrp_void=yes”元素会导致两个类似的失败测试被绕过。我遇到的问题是我不知道如何绕过此检查-也就是说,我不知道要设置哪些变量来绕过此测试以及尝试运行为目标构建的可执行文件的任何其他测试平台。我之所以能够绕过前面两个类似的测试,仅仅是因为我能够在 Google 上找到解决方法……有人知道要设置哪些变量或绕过此检查的另一种方法吗?

如果有人知道一种方法来抑制交叉编译时无法执行的所有测试,或者如果您只知道如何抑制这种特定检查,我将不胜感激。非常感谢你。

4

1 回答 1

9

需要设置以下变量:

  • ac_cv_file__dev_zero="是"
  • ac_cv_func_setpgrp_void="是"
  • apr_cv_process_shared_works="是"
  • apr_cv_mutex_robust_shared="否"
  • apr_cv_tcp_nodelay_with_cork="是"
  • ac_cv_sizeof_struct_iovec="8"
  • apr_cv_mutex_recursive="是"

使用以下更新的“iphone3.1-configure”脚本来配置程序:

#!/bin/bash

#
# 程序:iphone3.1-configure
# 作者:Michael Aaron Safyan (michaelsafyan@gmail.com)
# 简介:
# 这个程序运行由
# GNU Autotools 用于交叉编译第三方库
# 适用于 iPhone 3.1 SDK。在目录中运行此脚本
# 包含一个自动工具“配置”脚本。一旦你运行这个,
# 你可以使用“make”和“sudo make install”来构建库。
# 使用“/opt/iphone-3.1/”的安装前缀。
#

未设置 CPATH
取消设置 C_INCLUDE_PATH
取消设置 CPLUS_INCLUDE_PATH
取消设置 OBJC_INCLUDE_PATH
未设置的 LIBS
取消设置 DYLD_FALLBACK_LIBRARY_PATH
取消设置 DYLD_FALLBACK_FRAMEWORK_PATH

导出 BUILD_DARWIN_VER=`uname -r`
导出 SDKVER="3.1"
导出 DEVROOT="/Developer/Platforms/iPhoneOS.platform/Developer"
导出 SDKROOT="$DEVROOT/SDKs/iPhoneOS$SDKVER.sdk"
export PKG_CONFIG_PATH=/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS$SDKVER.sdk/usr/lib/pkgconfig:/Developer/Platforms/iPhoneOS.platform/Developer/usr/lib/pkgconfig:/opt/iphone- $SDKVER/lib/pkgconfig:/usr/local/iphone-$SDKVER/lib/pkgconfig
出口前缀="/opt/iphone-$SDKVER"
导出 AS="$DEVROOT/usr/bin/as"
出口 ASPP="$DEVROOT/usr/bin/as"
出口 AR="$DEVROOT/usr/bin/ar"
出口 RANLIB="$DEVROOT/usr/bin/ranlib"
export CPPFLAGS="-pipe -no-cpp-precomp -I$SDKROOT/usr/lib/gcc/arm-apple-darwin9/4.2.1/include/ -I$SDKROOT/usr/include -I$DEVROOT/usr/包括 -I/opt/iphone-$SDKVER/include -I/usr/local/iphone-$SDKVER/include"
export CFLAGS="-std=c99 -arch armv6 -pipe -no-cpp-precomp --sysroot='$SDKROOT' -isystem $SDKROOT/usr/lib/gcc/arm-apple-darwin9/4.2.1/include/ -isystem $SDKROOT/usr/include -isystem $DEVROOT/usr/include -isystem /opt/iphone-$SDKVER/include -isystem /usr/local/iphone-$SDKVER/include"
export CXXFLAGS="-std=c99 -arch armv6 -pipe -no-cpp-precomp --sysroot='$SDKROOT' -isystem $SDKROOT/usr/lib/gcc/arm-apple-darwin9/4.2.1/include/ -isystem $SDKROOT/usr/include -isystem $DEVROOT/usr/include -isystem /opt/iphone-$SDKVER/include -isystem /usr/local/iphone-$SDKVER/include"
export LDFLAGS="-arch armv6 --sysroot='$SDKROOT' -L$SDKROOT/usr/lib -L$DEVROOT/usr/lib -L/opt/iphone-$SDKVER/lib -L/usr/local/iphone -$SDKVER/lib"
导出 CPP="$DEVROOT/usr/bin/cpp"
导出 CXXCPP="$DEVROOT/usr/bin/cpp"
出口 CC="$DEVROOT/usr/bin/gcc-4.2"
导出 CXX="$DEVROOT/usr/bin/g++-4.2"
导出 LD="$DEVROOT/usr/bin/ld"
导出 STRIP="$DEVROOT/usr/bin/strip"

如果 [ !\( -d "$DEVROOT" \) ] ; 然后
   echo "找不到 iPhone SDK。文件夹 \"$DEVROOT\" 不存在。"
   1号出口
菲

如果 [ !\( -d "$SDKROOT" \) ] ; 然后
   echo "找不到 iPhone SDK。文件夹 \"$SDKROOT\" 不存在。"
   1号出口
菲

。/配置 \
    --prefix="$PREFIX" \
    --build="i386-apple-darwin$BUILD_DARWIN_VER" \
    --host="arm-apple-darwin9" \
    --启用静态\
    --禁用共享\
    ac_cv_file__dev_zero="是" \
    ac_cv_func_setpgrp_void="是" \
    apr_cv_process_shared_works="是" \
    apr_cv_mutex_robust_shared="否" \
    apr_cv_tcp_nodelay_with_cork="是" \
    ac_cv_sizeof_struct_iovec="8" \
    apr_cv_mutex_recursive="是" $@

使用“iphone3.1-configure --disable-dso --enable-threads && make”,然后使用“sudo make install”。

于 2009-10-22T07:07:53.267 回答