MAMPバイナリがカーネルと同じアーキテクチャ用に構築されている場合、naabsterの答えは正しいです。あなたが抱えている問題は、MAMPが同じアーキテクチャを使用して構築されていないことかもしれません-私はここ(10.7.3)でXAMPP 1.7.3を実行しているLionを持っていますが、あなたが抱えていたのと同じ問題に遭遇しました。
これが私のシステムの何が悪いのかを理解する方法と、それを修正する方法です。あなたの問題が私のものと同じである場合、あなたはあなたが進むにつれてフォローして確認することができるはずです。
まず、これが「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] 'です。これは、/ Applications / XAMPP / xamppfiles/modulesディレクトリにcdされた端末から実行しています。
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ビルドコマンド('sudo apxs -cia mod_xsendfile.c')でビルドされたモジュールでサポートされているmach-oバンドルタイプとアーキテクチャを確認してください。'-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
さて、これはx86_64イメージなしでビルドされたapacheインスタンスでは確かに機能しません。信頼しますが、確認してください。
問題を理解したと確信したので、apxsコマンドラインで強制された適切なアーキテクチャを使用して.soを再構築しましょう。これを行うには、Wl(リンカーフラグ)とWc(コンパイラフラグ)の2つの新しいパラメーターを追加します。-iは「インストール」(.soをmodulesディレクトリに移動)を意味し、-aは「アクティブ化」(httpd.confのLoadModule行を追加または再度有効にする)を意味します。
sudo apxs -cia -Wl,"-arch i386" -Wc,"-arch i386" mod_xsendfile.c
新しい.soがインストールされているApacheと一致するアーキテクチャをサポートしていることを再確認します(x86_64ではなくi386)
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
xamppfiles/binディレクトリにあるUIまたはapachectlスクリプトのいずれかを使用してサーバーを起動できるはずです。
それがあなたを助けることを願っています。
また、私はかなりまともなデューデリジェンス検索を行い、グーグで「XAMPPX-SendFileはオブジェクトを作成できません」を探しているスクワットについて見つけました。私が見つけたのは、ここでのあなたの質問でした。「MAMP」ではなく「XAMPP」を検索していたため、「XAMPP」を削除した後です。
私は10年前にLAMPPを使用して「x」AMPスタックから始め、次にWAMPPを使用しましたが、ApacheFriendsの連中は、サポートするすべてのプラットフォームでXAMPPと呼んでいます。Windowsサーバーでセットアップする必要があるかどうかを知っているので、私はそれらを使用することを好みます。現在使用しているものと同じパッケージをダウンロードできますが、Windowsの場合、同じサーバーがすべて(あまりにも多く)驚くことなくインストールされていることが期待できます。
したがって、(非常に)徹底するために、これらのタイプの問題をより簡単に発見するもう1つの方法は、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