Наабстер ответит правильно, если ваш двоичный файл MAMP построен для той же архитектуры, что и ваше ядро. Возможно, проблема в том, что MAMP не построен с использованием той же архитектуры - у меня Lion работает здесь (10.7.3) с XAMPP 1.7.3, и я просто столкнулся с той же проблемой, что и у вас.
Вот как я выяснил, что не так в моей системе, и как я это исправил. Если ваша проблема такая же, как и у меня, вы сможете следить и проверять ее на ходу.
Во-первых, вот вывод 'uname -a', чтобы показать вам, что я запускаю:
Darwin Tads-Mac-Pro.local 11.3.0 Darwin Kernel Version 11.3.0:
Thu Jan 12 18:47:41 PST 2012; root:xnu-1699.24.23~1/RELEASE_X86_64 x86_64
Вот шаги, которые я предпринял, чтобы отследить проблему и исправить ее:
Выясните, какие атрибуты были у других (работающих) модулей, которые отсутствовал в моем недавно построенном модуле xsendfile. Я выбрал mod_headers.so в качестве примера. Команда для поиска этой информации: 'file [filename] '. Я запускаю это из терминала cd'd в каталог / Applications / XAMPP / xamppfiles / modules:
file mod_headers.so
mod_headers.so: Mach-O universal binary with 2 architectures
mod_headers.so (for architecture i386): Mach-O bundle i386
mod_headers.so (for architecture ppc): Mach-O bundle ppc
Как видите, XAMPP любезно предоставляет универсальный двоичный файл, который поддерживает архитектуры i386 и ppc. Однако, поскольку ядро Lion работает под управлением x86_64, все, что я собираю с использованием apxs , если я не скажу иначе, будет x86_64.
Проверьте тип и архитектуру комплекта mach-o, поддерживаемые модулем, который был собран с помощью рекомендованной команды сборки apxs ('sudo apxs -cia mod_xsendfile.c'). Поскольку мы передаем '-i', apxs установит .so в стандартные модули apache dir ... /usr/libexec/apache2...
file /usr/libexec/apache2/mod_xsendfile.so
/usr/libexec/apache2/mod_xsendfile.so: Mach-O 64-bit bundle x86_64
Просто дважды проверьте, что это проблема, вы также можете посмотреть на двоичный файл httpd (apache):
file /Applications/XAMPP/xamppfiles/bin/httpd
/Applications/XAMPP/xamppfiles/bin/httpd: Mach-O universal binary with 2 architectures
/Applications/XAMPP/xamppfiles/bin/httpd (for architecture i386): Mach-O executable i386
/Applications/XAMPP/xamppfiles/bin/httpd (for architecture ppc): Mach-O executable ppc
Ну, теперь это точно не будет работать с экземпляром apache, созданным без образа x86_64. Доверяй, но проверяй, а!
Теперь, когда я уверен, что понимаю проблему, давайте пересоберем .so с правильной архитектурой, принудительно установленной в командной строке apxs. Для этого я просто добавляю два новых параметра: Wl (флаги компоновщика) и Wc (флаги компилятора). -I означает «установить» (переместить .so в каталог модулей), а -a означает «активировать» (добавить или повторно включить строку LoadModule в httpd.conf)
sudo apxs -cia -Wl,"-arch i386" -Wc,"-arch i386" mod_xsendfile.c
еще раз проверьте, что наш новый .so поддерживает архитектуру, которая соответствует установленному Apache (i386, а не x86_64)
file /Applications/XAMPP/xamppfiles/modules/mod_xsendfile.so
/Applications/XAMPP/xamppfiles/modules/mod_xsendfile.so: Mach-O bundle i386
Высокий. Теперь скопируйте эту индейку в каталог установки XAMPP:
sudo cp /usr/libexec/apache2/mod_xsendfile.so /Applications/XAMPP/xamppfiles/modules/
И добавьте строку LoadModule в /Applications/XAMPP/xamppfiles/etc/httpd.conf.
LoadModule xsendfile_module modules/mod_xsendfile.so
Вы должны иметь возможность запустить сервер, используя пользовательский интерфейс или скрипт apachectl, находящийся в каталоге xamppfiles / bin.
Надеюсь, это поможет вам.
Кроме того, я выполнил довольно приличную проверку на должную осмотрительность и обнаружил, что почти все сидят в поисках «XAMPP X-SendFile не может создать объект» в Goog. То, что я нашел, - это ваш вопрос, когда я исключил «XAMPP», так как искал «XAMPP», а не «MAMP»
Я начал с «x'AMP» примерно 10 лет назад, используя LAMPP, затем WAMPP, но ребята из ApacheFriends теперь называют свой XAMPP для всех платформ, которые они поддерживают. Я предпочитаю использовать их, так как знаю, что если мне нужно настроить на сервере Windows, я могу просто загрузить тот же пакет, который я использую сейчас, но для Windows, и я могу ожидать, что все те же серверы будут установлены без (слишком много) сюрпризов.
Итак, чтобы быть (очень) тщательным, другой способ более легкого обнаружения этих типов проблем - через Console.app. Откройте его, отфильтруйте по org.apache.httpd, и вы увидите нечто похожее на это:
httpd: Syntax error on line 117 of /private/etc/apache2/httpd.conf: Cannot load
/usr/libexec/apache2/mod_xsendfile.so into server:
dlopen(/usr/libexec/apache2/mod_xsendfile.so, 10): no suitable image found.
Did find:\n\t/usr/libexec/apache2/mod_xsendfile.so: mach-o, but wrong architecture
Вы также можете получить это из командной строки при запуске сервера apache вручную:
sudo apachectl -E /tmp/foo.txt -k start; tail -f /tmp/foo.txt