naabster的答案是正確的,如果你的MAMP二進制是建立在相同的架構您的核心。你遇到的問題可能是MAMP不是使用相同的體系結構構建的 - 我使用XAMPP 1.7.3在這裏運行Lion(10.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作爲例子。找到該信息的命令是'文件[文件名]'。我從cd'd到/應用/ 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。
檢查使用推薦的apxs build命令('sudo apxs -cia mod_xsendfile.c')構建的模塊支持的mach-o bundle類型和體系結構。因爲我們通過「-i」的APXS將安裝。所以到默認的Apache模塊目錄......在/ 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
現在好了,肯定不會沒有x86_64的圖像內置Apache實例的工作。信任,但驗證,呃!
現在,我確定我理解了這個問題,讓我們重新構建.so,並在apxs命令行上強制使用適當的體系結構。要做到這一點,我只是添加兩個新的參數,W1(鏈接器標誌)和Wc(編譯器標誌)。所述-i裝置「安裝」(。所以移動到模塊目錄)和-a手段「激活」(添加或重新啓用在httpd.conf的LoadModule線)
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
您應該能夠火起來使用無論是UI或xamppfiles/bin目錄中找到apachectl腳本的服務器。
希望能幫到你。
另外,我做了一個相當不錯的盡職調查搜索,發現幾乎蹲在Goog尋找'XAMPP X-SendFile無法創建對象'。我在這裏找到的是你的問題,一旦我在搜索'XAMPP'後就消除了'XAMPP',而不是'MAMP'
我從'x'AMP堆棧開始,使用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
事實證明,我還運行了一個稍微過時的MAMP版本,所以我也必須升級它(因爲Apache版本不同)。雖然這很好。謝謝! – lakenen 2012-04-12 14:51:45
樂意幫忙,很高興你啓動並運行:) – 2012-04-13 08:05:13
我有和@lakenen一樣的問題。在升級MAMP之後,mod_xsendfile加載沒問題。我甚至沒有把它編譯到i386,只是使用「apxs -cia mod_xsendfile.c」工作正常。謝謝! – woran 2013-09-24 01:40:05