Проблема в том, что Apple построила Apache как жирную двоичную систему, поэтому она поддерживает четыре архитектуры, поэтому она будет загружать только модули, которые создаются как живые двоичные файлы. Вы можете использовать утилиту lipo
, чтобы выяснить, как было построено что-то:
lorien$ lipo -info /usr/sbin/httpd
Architectures in the fat file: /usr/sbin/httpd are: ppc7400 ppc64 i386 x86_64
Скорее всего, вы увидите что-то вроде этого:
lorien$ lipo -info /usr/libexec/apache2/modules/mod_dav_svn.so
Non-fat file: /usr/libexec/apache2/modules/mod_dav_svn.so is architecture: i386
Вы можете использовать arch
, чтобы заставить команду работать в одном режиме или другой, или утилиту lipo
для изменения двоичного кода и исключения определенных вариантов. В целом, это очень больно иметь дело в каждом конкретном случае.
Другой вариант состоит в том, чтобы скомпилировать все в жирные двоичные файлы, что я и делал в последнее время. При использовании на основе autoconf вещей (почти что-либо с сценарием configure
) вы обычно можете контролировать большую часть процесса с помощью переменных окружения. У меня есть куча скриптов, которые завершают процесс сборки, чтобы убедиться, что они правильно настроены. Используйте следующие команды, чтобы восстановить SVN:
lorien$ cd ~/src/svn-1.6.2
lorien$ cat env-sh
ARCHFLAGS="-arch ppc -arch ppc64 -arch i386 -arch x86_64"
DEVPATH='/Developer/SDKs/MacOSX10.5.sdk'
CPPFLAGS="-isysroot $DEVPATH"
CFLAGS="$ARCHFLAGS $CPPFLAGS"
CXXFLAGS="$CFLAGS"
LDFLAGS="-Wl,-syslibroot,$DEVPATH $ARCHFLAGS"
MACOS_DEPLOYMENT_TARGET=10.5
export CFLAGS CXXFLAGS LDFLAGS MACOS_DEPLOYMENT_TARGET
lorien$ . env-sh
lorien$ ./configure ...
lorien$ make -j2
lorien$ lipo -info subversion/mod_dav_svn/.libs/mod_dav_svn.so
Architectures in the fat file: subversion/mod_dav_svn/.libs/mod_dav_svn.so are: ppc7400 ppc64 i386 x86_64
Я держу копию среды в моем домашнем каталоге. Всякий раз, когда я что-то создаю, я копирую env-sh
, отредактируйте его по мере необходимости, отправьте его, а затем откройте. В глубине developer.apple.com
есть гораздо больше информации, например Tech Note 2137 и Universal Binary Programming Guidelines.
Удачи. Я знаю, что я все еще прокладываю себе путь через это болото веселья.
Я попытался выполнить ваши шаги выше, но полученный mod_dav_svn.so все еще i386, когда я делаю липо. У меня установлен последний SDK (тот, который поставляется с комплектом iPhone 3.0). Все, что вы говорите, имеет большой смысл. Просто не создавайте его, как ничего, кроме i386. – Geuis
У меня возникли проблемы с некоторыми пакетами, которые не использовали CFLAGS и LDFLAGS в соответствующих местах, но subversion получает это право. Перед запуском скрипта configure убедитесь, что вы делаете «make distclean» на верхнем уровне. Я попробовал это с чистой выборкой svn-1.6.2, и он работал на моем MacBook Pro. Вы смотрите на встроенный, а не на установленный справа? –
Это было очень полезно, спасибо. В качестве примечания я должен был сделать трюк envvars/DYLD_LIBRARY_PATH, упомянутый здесь позже: http://www.thoughtspark.org/node/19 – leander