Кросс-компиляция 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".

Другие вопросы по тегам