質問

背景

私は、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"をそれぞれ使用します。

クロスコンパイルプロセスを簡単に繰り返し実行できるようにするために、「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"の修正方法スクリプト?ありがとう。

役に立ちましたか?

解決

わかりました。これはまだビルドされませんが、さらに先へ進みます...

      
  1. Cプリプロセッサはアーキテクチャを使用できません。
  2.   
  3. Cプリプロセッサは--sysrootまたは-isystemを受け入れません(単に '-I'を使用します)。
  4.   
  5. " cpp"を使用します「cpp-4.2」の代わりに(4.2バージョンには欠陥があり、プリプロセッサであるため、どちらのバージョンを使用しても問題ありません。したがって、動作するバージョンを使用することもできます。)

iphone3.1-configureスクリプトの更新バージョンは次のとおりです。

#! /bin/bash

#
# Program  : iphone3.1-configure
# Authors  : Michael Aaron Safyan (michaelsafyan@gmail.com)
# 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 you 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="-pipe -no-cpp-precomp -I$SDKROOT/usr/lib/gcc/arm-apple-darwin9/4.2.1/include/ -I$SDKROOT/usr/include -I$DEVROOT/usr/include -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"
export CPP="$DEVROOT/usr/bin/cpp"
export CXXCPP="$DEVROOT/usr/bin/cpp"
export CC="$DEVROOT/usr/bin/gcc-4.2"
export CXX="$DEVROOT/usr/bin/g++-4.2"
export LD="$DEVROOT/usr/bin/ld"
export STRIP="$DEVROOT/usr/bin/strip"

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 ac_cv_file__dev_zero=no ac_cv_func_setpgrp_void=yes $@

また、「-disable-dso」だけでなく、「-enable-threads --disable-dso」で呼び出しています。これはまだ機能しません...で失敗しています:

checking for PTHREAD_PROCESS_SHARED in pthread.h... yes
checking for pthread_mutexattr_setpshared... yes
checking for working PROCESS_SHARED locks... configure: error: in `/Users/michaelsafyan/Downloads/apr-1.3.8':
configure: error: cannot run test program while cross compiling
See `config.log' for more details.

ただし、これはAPRの特定のテストに問題がある可能性があります。リンクに追加の質問を投稿しています。

編集

iPhone用Apache Portable Runtimeのクロスコンパイル

他のヒント

スクリプトをありがとう。とても助かりました。ビルドしたlibのアーキテクチャが i386 ではなく arm になるように、少し変更する必要がありました。

最初に、コンパイラを変更する必要がありました:

# export CC="$DEVROOT/usr/bin/gcc-4.2"
export CC="$DEVROOT/usr/bin/arm-apple-darwin10-gcc-4.2.1"

次に、 CFLAGS、CXXFLAGS、LDFLAGS

から、このコンパイラが理解できないため、 -arch armv6 オプションを削除しました

SDKVERとgccのバージョンを更新し、機能しました!

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top