Кросс-компиляция Apache Portable Runtime для iPhone
Это продолжение предыдущего вопроса о кросс-компиляции для iPhone:
Кросс-компиляция библиотек на основе Autotools для официального iPhone SDK
По сути, я пытаюсь скомпилировать Apache Portable Runtime (APR) версии 1.3.8 (последняя) для iPhone. В настоящее время я сталкиваюсь со следующей ошибкой на этапе настройки:
проверка рабочих блокировок PROCESS_SHARED... configure: error: в `/Users/michaelsafyan/Downloads/apr-1.3.8': configure: error: не удается запустить тестовую программу во время кросс-компиляции Смотрите `config.log'для более подробной информации.
Я вызываю скрипт "configure" через "iphone3.1-configure --disable-dso --enable-threads", где "iphone3.1-configure" - это следующий скрипт, который я подготовил для вызова " Настроить скрипт
#! / Бен / Баш # # Программа: iphone3.1-configure # Авторы: Майкл Аарон Сафян (michaelsafyan@gmail.com) # Синопсис: # Эта программа запускает скрипт "configure", сгенерированный # GNU Autotools для кросс-компиляции сторонних библиотек # для iPhone 3.1 SDK. Запустите этот скрипт, находясь в каталоге # содержащий автоинструмент "настроить" скрипт. Как только вы запустите это, # вы можете использовать "make" и "sudo make install" для сборки библиотеки. # Используется префикс установки /opt/iphone-3.1/. # не установлен CPATH unset C_INCLUDE_PATH unset CPLUS_INCLUDE_PATH unset OBJC_INCLUDE_PATH сбросить LIBS unset DYLD_FALLBACK_LIBRARY_PATH unset DYLD_FALLBACK_FRAMEWORK_PATH export BUILD_DARWIN_VER = `uname -r` export SDKVER = "3.1" export DEVROOT = "/ Разработчик / Платформы / iPhoneOS.platform / Разработчик" export SDKROOT="$DEVROOT/SDKs/iPhoneOS$SDKVER.sdk" export PKG_CONFIG_PATH=/ Разработчик / Платформы / iPhoneOS.platform / Разработчик /SDKs/iPhoneOS$SDKVER.sdk/usr/lib/pkgconfig:/Developer/Platforms/iPhoneOS.platform/Developer/usr/lib/pkgconfig:/opt/iphone-$SDKVER/ Библиотека / pkg-config: / USR / местные / $ SDKVER iPhone-/ Библиотека / pkg-config 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' -система $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/ Библиотека" 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" если [! \( -d "$DEVROOT" \) ]; затем echo "Не удалось найти SDK для iPhone. Папка \"$DEVROOT\"не существует." выход 1 фи если [! \( -d "$SDKROOT" \) ]; затем echo "Не удалось найти SDK для iPhone. Папка \"$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= нет ac_cv_func_setpgrp_void= да $@
Ошибка, которую дает мне конфигурация, - это не первый раз, когда я получаю сообщение типа "не могу запустить тестовую программу во время кросс-компиляции". Фактически, элементы "ac_cv_file__dev_zero=no" и "ac_cv_func_setpgrp_void=yes" в сценарии "iphone3.1-configure" приводят к тому, что два аналогично провальных теста будут пропущены. У меня проблема в том, что я не знаю, как обойти эту проверку, то есть я не знаю, какую переменную (переменные) нужно установить, чтобы обойти этот тест, и любые дополнительные тесты, которые пытаются запустить исполняемые файлы, созданные для цели Платформа. Мне удалось обойти два предыдущих аналогичных теста просто потому, что я смог найти обходной путь в Google... кто-нибудь знает, какие переменные нужно установить или другой способ обойти эту проверку?
Если кто-нибудь знает способ подавления всех тестов, которые не могут быть выполнены при кросс-компиляции, или если вы просто знаете, как подавить эту конкретную проверку, я был бы очень признателен. Большое спасибо.
1 ответ
Следующие переменные должны быть установлены:
- 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 # Авторы: Майкл Аарон Сафян (michaelsafyan@gmail.com) # Краткий обзор: # Эта программа запускает сценарий "configure", сгенерированный # Autotools # GNU для кросс-компиляции сторонние библиотеки # для iPhone 3.1 SDK. Запустите этот сценарий, находясь в каталоге #, содержащем сценарий "configure" для autotools. После запуска # вы можете использовать "make" и "sudo make install" для сборки библиотеки. # Используется префикс установки /opt/iphone-3.1/. # 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 экспортировать /SDKs/iPhoneOS$SDKVER.sdk" export PKG_CONFIG_PATH=/ Разработчик / Платформы / iPhoneOS.platform/ Разработчик /SDKs/iPhoneOS$SDKVER.sdk/usr/lib/pkgconfig:/Developer/Platforms/iPhoneOS.platform/Developer/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"экспорт STRIP="$DEVROOT/usr/bin/strip" if [! \( -d "$DEVROOT" \) ]; затем эхо "iPhone SDK не найден. Папка \"$DEVROOT\"не существует". выход 1 фай, если [! \( -d "$SDKROOT" \) ]; затем эхо "iPhone SDK не найден. Папка \"$SDKROOT\"не существует". exit 1 fi ./configure \ --prefix="$PREFIX" \ --build="i386-apple-darwin$BUILD_DARWIN_VER" \ --host="arm-apple-darwin9" \ --enable-static \ - отключить-Shared \ 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".