背景
我正在编写一个针对几种不同手机的程序,包括 iPhone。该程序依赖于几个第三方库。我很难为 iPhone 和 iPhone 模拟器交叉编译这些第三方库。这些库包括 Apache Portable Runtime 和 GNUTLS,以及它们的依赖项。我希望构建的库以前缀“/opt/iphone-3.1”、“/opt/iphone-3.0”、“/opt/iphone-2.2.1”、“/opt/iphone-simulator-3.1”结尾”和“/opt/iphone-simulator-3.0”。
为了使交叉编译过程易于重复,我正在创建脚本来为每个目标平台调用“配置”脚本(“iphone3.1-configure”、“iphone3.0-configure”、“iphone2.2.1 -configure”、“iphonesim3.1-configure”和“iphonesim3.0-configure”)。这是我遇到麻烦的地方。
我正在使用带有官方 Xcode 3.2 + iPhone SDK 3.1 的 Mac OS X 10.6 Snow Leopard 计算机。
地位
我目前有以下“iphone3.1-configure”脚本:
#!/bin/bash # # 程序:iphone3.1-configure # 作者 : Michael Aaron Safyan # 简介: # 这个程序运行由 # 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="-std=c99 -arch armv6 -pipe -no-cpp-precomp --sysroot='$SDKROOT' -isystem $SDKROOT/usr/include -isystem $DEVROOT/usr/include -isystem /opt/iphone- $SDKVER/include -isystem /usr/local/iphone-$SDKVER/include" export CFLAGS="-std=c99 -arch armv6 -pipe -no-cpp-precomp --sysroot='$SDKROOT' -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/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-4.2" 出口 CC="$DEVROOT/usr/bin/gcc-4.2" 导出 CXX="$DEVROOT/usr/bin/g++-4.2" 导出 LD="$DEVROOT/usr/bin/ld" 如果 [ !\( -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 $@
在“apr-1.3.8”文件夹中,我正在运行“iphone3.1-configure --disable-dso”,并且得到:
检查构建系统类型... i386-apple-darwin10.0.0 检查主机系统类型... arm-apple-darwin9 检查目标系统类型... arm-apple-darwin9 配置 APR 库 平台:arm-apple-darwin9 检查工作 mkdir -p... 是 4 月版本:1.3.8 检查选择的布局... apr 检查 arm-apple-darwin9-gcc ... /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc-4.2 检查 C 编译器默认输出文件名... a.out 检查 C 编译器是否工作......是的 检查我们是否在交叉编译...是的 检查可执行文件的后缀... 检查目标文件的后缀... o 检查我们是否正在使用 GNU C 编译器...是的 检查 /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc-4.2 是否接受 -g... 是 检查 /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc-4.2 选项以接受 ISO C89... 不支持 为 arm-apple-darwin9 应用 APR 提示文件规则 将“-DDARWIN”添加到 CPPFLAGS 将“-DSIGPROCMASK_SETS_THREAD_MASK”添加到 CPPFLAGS 将 apr_posixsem_is_global 设置为“是” 将 ac_cv_func_kqueue 设置为“否” 将 ac_cv_func_poll 设置为“否” (默认为 unix) 检查 make 是否设置 $(MAKE)... 是 检查如何运行 C 预处理器... /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/cpp-4.2 配置:错误:在`/Users/michaelsafyan/Downloads/apr-1.3.8'中: 配置:错误:C 预处理器“/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/cpp-4.2”未通过完整性检查 更多细节见“config.log”。
“config.log”的相关部分是:
配置:7710:检查如何运行 C 预处理器 配置:7828:结果:/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/cpp-4.2 配置:7857:/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/cpp-4.2 -std=c99 -arch armv6 -pipe -no-cpp-precomp --sysroot='/Developer/Platforms/iPhoneOS.platform /Developer/SDKs/iPhoneOS3.1.sdk' -isystem /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.sdk/usr/include -isystem /Developer/Platforms/iPhoneOS.platform/Developer/usr/包括 -isystem /opt/iphone-3.1/include -isystem /usr/local/iphone-3.1/include -DDARWIN -DSIGPROCMASK_SETS_THREAD_MASK conftest.c cpp-4.2:尝试执行“cc1”时出错:execvp:没有这样的文件或目录 配置:7864:$?= 1 配置:失败的程序是: | /* confdefs.h。*/ | #define PACKAGE_NAME "" | #define PACKAGE_TARNAME "" | #define PACKAGE_VERSION "" | #define PACKAGE_STRING "" | #define PACKAGE_BUGREPORT "" | /* 结束 confdefs.h。*/ | #ifdef __STDC__ | # 包括 | #别的 | # 包括 | #万一 | 语法错误 配置:7857:/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/cpp-4.2 -std=c99 -arch armv6 -pipe -no-cpp-precomp --sysroot='/Developer/Platforms/iPhoneOS.platform /Developer/SDKs/iPhoneOS3.1.sdk' -isystem /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.sdk/usr/include -isystem /Developer/Platforms/iPhoneOS.platform/Developer/usr/包括 -isystem /opt/iphone-3.1/include -isystem /usr/local/iphone-3.1/include -DDARWIN -DSIGPROCMASK_SETS_THREAD_MASK conftest.c cpp-4.2:尝试执行“cc1”时出错:execvp:没有这样的文件或目录 配置:7864:$?= 1 配置:失败的程序是: | /* confdefs.h。*/ | #define PACKAGE_NAME "" | #define PACKAGE_TARNAME "" | #define PACKAGE_VERSION "" | #define PACKAGE_STRING "" | #define PACKAGE_BUGREPORT "" | /* 结束 confdefs.h。*/ | #ifdef __STDC__ | # 包括 | #别的 | # 包括 | #万一 | 语法错误 配置:7926:错误:在`/Users/michaelsafyan/Downloads/apr-1.3.8'中: 配置:7929:错误:C 预处理器“/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/cpp-4.2”未通过完整性检查 更多细节见“config.log”。
问题
如何修复“iphone3.1-configure”脚本?谢谢。