Mic*_*yan 5 iphone autotools cross-compiling gcc4
我正在编写一个针对几种不同手机的程序,包括iPhone.该计划取决于几个第三方图书馆.我很难为iPhone和iPhone模拟器交叉编译这些第三方库.这些库包括Apache Portable Runtime和GNUTLS,以及它们的依赖项.我希望构建的库最后以前缀"/opt/iphone-3.1","/ opt/iphone-3.0","/ opt/iphone-2.2.1","/ opt /iphone-modules3.1 "和"/opt/iphone-simulator-3.0"分别.
为了使交叉编译过程易于重复,我正在创建脚本来为每个目标平台调用"configure"脚本("iphone3.1-configure","iphone3.0-configure","iphone2.2.1" -configure","iphonesim3.1-configure"和"iphonesim3.0-configure").这是我遇到麻烦的地方.
我正在使用Mac OS X 10.6 Snow Leopard计算机和官方Xcode 3.2 + iPhone SDK 3.1.
我目前有以下"iphone3.1-configure"脚本:
#! /bin/bash # # Program : iphone3.1-configure # Author : Michael Aaron Safyan # Synopsis : # This program runs the "configure" script generated by the # GNU Autotools in order to cross-compile thirdparty libraries # for the iPhone 3.1 SDK. Run this script while in a directory # containing an autotools "configure" script. Once run, this # you can use "make" and "sudo make install" to build the library. # An install prefix of "/opt/iphone-3.1/" is used. # unset CPATH unset C_INCLUDE_PATH unset CPLUS_INCLUDE_PATH unset OBJC_INCLUDE_PATH unset LIBS unset DYLD_FALLBACK_LIBRARY_PATH unset DYLD_FALLBACK_FRAMEWORK_PATH export BUILD_DARWIN_VER=`uname -r` export SDKVER="3.1" export DEVROOT="/Developer/Platforms/iPhoneOS.platform/Developer" export 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 export PREFIX="/opt/iphone-$SDKVER" 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 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" export CPP="$DEVROOT/usr/bin/cpp-4.2" export CC="$DEVROOT/usr/bin/gcc-4.2" export CXX="$DEVROOT/usr/bin/g++-4.2" export LD="$DEVROOT/usr/bin/ld" if [ ! \( -d "$DEVROOT" \) ] ; then echo "The iPhone SDK could not be found. Folder \"$DEVROOT\" does not exist." exit 1 fi if [ ! \( -d "$SDKROOT" \) ] ; then echo "The iPhone SDK could not be found. Folder \"$SDKROOT\" does not exist." exit 1 fi ./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",我得到:
checking build system type... i386-apple-darwin10.0.0 checking host system type... arm-apple-darwin9 checking target system type... arm-apple-darwin9 Configuring APR library Platform: arm-apple-darwin9 checking for working mkdir -p... yes APR Version: 1.3.8 checking for chosen layout... apr checking for arm-apple-darwin9-gcc... /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc-4.2 checking for C compiler default output file name... a.out checking whether the C compiler works... yes checking whether we are cross compiling... yes checking for suffix of executables... checking for suffix of object files... o checking whether we are using the GNU C compiler... yes checking whether /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc-4.2 accepts -g... yes checking for /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc-4.2 option to accept ISO C89... unsupported Applying APR hints file rules for arm-apple-darwin9 adding "-DDARWIN" to CPPFLAGS adding "-DSIGPROCMASK_SETS_THREAD_MASK" to CPPFLAGS setting apr_posixsem_is_global to "yes" setting ac_cv_func_kqueue to "no" setting ac_cv_func_poll to "no" (Default will be unix) checking whether make sets $(MAKE)... yes checking how to run the C preprocessor... /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/cpp-4.2 configure: error: in `/Users/michaelsafyan/Downloads/apr-1.3.8': configure: error: C preprocessor "/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/cpp-4.2" fails sanity check See `config.log' for more details.
"config.log"的相关部分是:
configure:7710: checking how to run the C preprocessor configure:7828: result: /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/cpp-4.2 configure: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/include -isystem /opt/iphone-3.1/include -isystem /usr/local/iphone-3.1/include -DDARWIN -DSIGPROCMASK_SETS_THREAD_MASK conftest.c cpp-4.2: error trying to exec 'cc1': execvp: No such file or directory configure:7864: $? = 1 configure: failed program was: | /* confdefs.h. */ | #define PACKAGE_NAME "" | #define PACKAGE_TARNAME "" | #define PACKAGE_VERSION "" | #define PACKAGE_STRING "" | #define PACKAGE_BUGREPORT "" | /* end confdefs.h. */ | #ifdef __STDC__ | # include | #else | # include | #endif | Syntax error configure: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/include -isystem /opt/iphone-3.1/include -isystem /usr/local/iphone-3.1/include -DDARWIN -DSIGPROCMASK_SETS_THREAD_MASK conftest.c cpp-4.2: error trying to exec 'cc1': execvp: No such file or directory configure:7864: $? = 1 configure: failed program was: | /* confdefs.h. */ | #define PACKAGE_NAME "" | #define PACKAGE_TARNAME "" | #define PACKAGE_VERSION "" | #define PACKAGE_STRING "" | #define PACKAGE_BUGREPORT "" | /* end confdefs.h. */ | #ifdef __STDC__ | # include | #else | # include | #endif | Syntax error configure:7926: error: in `/Users/michaelsafyan/Downloads/apr-1.3.8': configure:7929: error: C preprocessor "/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/cpp-4.2" fails sanity check See `config.log' for more details.
如何修复"iphone3.1-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" 导出 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 导出 PREFIX="/opt/iphone-$SDKVER" 导出 AS="$DEVROOT/usr/bin/as" 导出 ASCPP="$DEVROOT/usr/bin/as" 导出 AR="$DEVROOT/usr/bin/ar" 导出 RANLIB="$DEVROOT/usr/bin/ranlib" 导出 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" 导出 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" 导出 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" 导出 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=是的$@
另外,我使用“--enable-threads --disable-dso”调用,而不仅仅是“--disable-dso”。这仍然不起作用......它失败了:
检查 pthread.h 中的 PTHREAD_PROCESS_SHARED...是 检查 pthread_mutexattr_setpshared...是的 检查工作 PROCESS_SHARED 锁...配置:错误:在“/Users/michaelsafyan/Downloads/apr-1.3.8”中: 配置:错误:交叉编译时无法运行测试程序 有关更多详细信息,请参阅“config.log”。
不过,这可能是APR具体测试的问题。我在链接中发布了后续问题。
我在Cross-compiling the Apache Portable Runtime for the iPhone中提供了更完整的解决方案。
| 归档时间: |
|
| 查看次数: |
6990 次 |
| 最近记录: |