Проблема заключается в том, что 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
скрыто гораздо больше информации, например, Техническая записка 2137 и Универсальные руководящие принципы двоичного программирования .
Удачи. Я знаю, что я все еще прокладываю себе путь через эту болтовню веселья.