• ベストアンサー

Apache2のモジュール作成方法

お世話になります。 Apache2のモジュール作成時、複数のソースファイルから構成される場合のMakefileの修正方法を教えてください。 Web上に沢山あるApacheモジュールの作成方法は一つのファイルで構成されるサンプルしかなく困っています。

質問者が選んだベストアンサー

  • ベストアンサー
  • entree
  • ベストアンサー率55% (405/735)
回答No.2

Apache 2.2 で試してみましたが、modules.mkを編集すれば可能のようです。 foo.cとbar.cも必要な場合、以下のように編集すればうまく行くのではないかと。 -- mod_orz.la: mod_orz.slo foo.slo bar.slo     $(SH_LINK) -rpath $(libexecdir) -module -avoid-version mod_orz.lo foo.slo bar.slo DISTCLEAN_TARGETS = modules.mk shared = mod_orz.la --

miruha2011
質問者

お礼

ご回答ありがとうございます。 $(SH_LINK) -rpath $(libexecdir) -module -avoid-version mod_orz.lo foo.slo bar.slo は $(SH_LINK) -rpath $(libexecdir) -module -avoid-version mod_orz.lo foo.lo bar.lo でしょうか? あとできればfoo.slo bar.sloを変数のようにできないでしょうか? No1で追記しましたが、 OBJS=aaa.slo bbb.slo ccc.slo と定義して mod_XXX.la:mod_XXX.slo $(OBJS)と書いてみましたが駄目でした。

その他の回答 (1)

  • entree
  • ベストアンサー率55% (405/735)
回答No.1

こんな感じでできませんか? apxs -i -a -c mod_target.c hoge.c fuga.c  ==> mod_target.soが生成

miruha2011
質問者

お礼

ご回答ありがとうございます。 変更されたソースだけをコンパイルするようにMakefileでやりたいのです。 modules.mkを次のように変更してみましたが駄目でした。 mod_XXX.la:mod_XXX.slo $(OBJS)に指定している$(OBJS)が無視されてるみたいです。 mod_XXX.la:mod_XXX.slo aaa.slo bbb.slo ccc.slo と書いた時はaaa.c bbb.c ccc.cがコンパイルされました。 ------------------------ mod_XXX.la:mod_XXX.slo $(OBJS)  $(SH_LINK) -rpath $(libexecdir) -module -avoid-version mod_XXX.lo $(OBJS) DISTCLEAN_TARGETS = modules.mk shared = mod_XXX.la OBJS=aaa.slo bbb.slo ccc.slo aaa.o: aaa.c  apxs -c aaa.c bbb.o: bbb.c  apxs -c bbb.c ccc.o: ccc.c  apxs -c ccc.c

関連するQ&A

  • apache2のモジュール一覧

    環境 RedHat9 apache2.0.46 apache1の時は全モジュール一覧がINSTALLファイルで 確認できたのですが、apache2では同ファイルで確認 できません。 ファイルでもコマンドでも良いので全モジュール一覧 を確認する方法をご存知の方がいましたら教えてくだ さい。 ※個々のモジュールで使用するか指定したいので  「--enable-module=allで指定」等の回答は  今回は無しでお願いします。

  • DB接続を行うApacheモジュールをApacheに追加して、Apacheを再起動するとエラー

    皆さんこんにちは。 Apacheモジュールを作りを行っていました。 モジュール内で、 MySQLにコネクションをはり、 queryリクエストの往来を行うだけの単純なものです。 モジュールの作成から次の順序で作業を進めました。 ----------------------------- (1)モジュールの作成 (2)モジュール(1)のmakeを行う -> make成功 (3)モジュールのsoファイルを配置。 /usr/local/apache2/modules/ に make時に作成された モジュールの「soファイル」を配置。 (4)httpd.confの編集 httpd.confに 作成したモジュールのディレクティブを挿入。 LoadModule db_connect_module modules/db_connect.so <Location /db_connect> SetHandler db_connect </Location> (5)Apacheのリスタート ----------------------------- (5)でapacheの再起動を行うと、 次のエラーが表示されました。 httpd: Syntax error on line 96 of /usr/local/apache2/conf/httpd.conf: Cannot load /usr/local/apache2/modules/mod_db_connect.so into server: /usr/local/apache2/modules/mod_db_connect.so: undefined symbol: mysql_query ここで不思議だったのは、 確かに、 作成したMySQLに接続するためのApacheモジュール内で、 「mysql_query」を利用していますが、 そのモジュールのmake時には エラーが表示されていなかったし、 make時にエラーが出なかったとおり、 モジュール内のソースでも、 記述した「mysql.h」も正常にインクルードされていると思います。 どうして、 apacheのhttpd.confは 「mysql_query」に関する 上記のエラーを出してくるのでしょうか? どなたか考えられる原因を アドバイスいただけるとありがたい次第です。 以上どうぞ宜しくお願い致します。

  • apacheへのモジュール追加の確認方法

     apache2で、DSO機能を使ってモジュールを追加した 場合、どのようにしてモジュールがうまく追加できた か、を確認しますか。  コンパイルのときに入れたモジュールは httpd -l で確認できますが、似たような方法は、DSOの時もありますか。  よろしくお願いします。

  • apache apxsによるモジュール追加

    apacheをconfigure時にmod_soを指定しインストールした場合、再コンパイル無しでモジュールの追加ができるという認識でしたが、 apache標準モジュールでも追加の出来ないものがあるのでしょうか? 下記サイトでは、rewrite_moduleの追加方法があるのですが、他のモジュールも同じ方法で出来るのでしょうか? 【参考サイト】 http://kazmax.zpp.jp/apache/apache3.html また、3rdpartyモジュールがあれば、ダウンロードしコンパイルする事で追加可能ですが。。。。 3rdpartyモジュールが無く、apache標準モジュールでも追加の出来ないものがあるのであれば、再コンパイルになると思うのですが.... apache標準モジュールでも追加の出来ないものがあるのか わかる方いらっしゃいましたら教えて下さい。 もし、追加可能であり、上記参考サイトの方法以外であれば、教えて 頂きたいのですが。

  • apacheのモジュールについて

    Apache初心者で勉強中です。 Fedoracore5既存のApache2でモジュールを追加する方法がわからず困っています。 具体的には、下記のことががわかりません。 1."mod_perl2"を入れたいが、Fedoracore5既存のApache2がインストールされているディレクトリが、どこを指すのかわからない。  ("/etc/httpd/conf/" or "/usr/sbin/"?) 2."mod_deflate"をコンパイルしたいが、"mod_deflate.c"のあるディレクトリがわからない。 また、よろしければでいいのですが、apacheは、「OS既存」と「ソースをインストールしたもの」、どちらが使い勝手がよいでしょうか。 お答えいただけると幸いです。 初心者ゆえ、もしかしたら、言葉のはき違いがあるかもしれませんが、よろしくお願いいたします。

  • Apacheモジュールのコンパイルの件で質問させていただきます。

    Apacheモジュールのコンパイルの件で質問させていただきます。 Apacheモジュールを作成し、 makeにてコンパイルしたところ、 正常にコンパイルが出来ましたので、 confにモジュール動作の記述を入れ、 Apacheを再起動したところ、 soファイルに、 「abc」という関数が定義されていない! ----- # /usr/local/apache2/bin/apachectl restart httpd: Syntax error on line 58 of /usr/local/apache2/conf/httpd.conf: Cannot load /usr/local/apache2/modules/mod_test.so into server: /usr/local/apache2/modules/mod_test.so: undefined symbol: abc ----- という事で叱られてしまいました。 「abc」という関数は、 作成したApacheモジュールで確かに使用しており、 「test.h」という自作ライブラリに入っている関数でありますが、 そのモジュールをコンパイルしたときは、 何も怒られず正常にコンパイルが成功していて、 モジュール内に記述した「test.h」も 正常にincludeできていたと思われます。 モジュールのコンパイルの時は 正常にコンパイルできて、 Apacheの再起動時には怒られるといいのは、 パスの参照先が Apache起動時とコンパイル時で異なるからという事でしょうか? 合っているかわかりませんが、 念のため、 以下の通りパスを追記する場所で、 関数「abc」を記述しているライブラリの場所を追記してみたのですが、 やはり、Apache起動を試みると、 soファイル内の関数(abc)何て知らん!と怒られてしまいました。 ----- # vi /etc/ld.so.conf # ldconfig # LD_LIBRARY_PATH=/home/test/; export LD_LIBRARY_PATH ----- こうゆう場合、 どうすれば、モジュールのsoファイルを 正常に読んでくれて、Apacheを起動してくれるでしょうか。 何かアドバイスいただけるとありがたいです。 宜しくお願い致します。 開発OSはFedora9です。ApacheモジュールはCで普通に書いています。

  • Apache2.0ではじめてモジュールの追加

    現在、LinuxサーバにてApache2.0を利用しています。 mod_proxyが必要になったためモジュールの追加を行わなければなりません。 Apache2.0をインストール時のConfigureオプションでは、 インストール先を指定しただけでモジュール追加のオプションは指定して いませんでした。 ./configure --prefix=/usr/local/apache2 モジュールの追加をいままで行ったことがないので 手順が分かっていません。 もう一度 Apacheをインストール configure make && make install しなければならないのでしょうか。 運用中のApacheをできるだけ止めることなく安全に追加したいのですが、 良い方法はありますでしょうか。 こちらが現在の環境です。 Linux2.6 jakarta-tomcat-5.0.28 j2sdk-1_4_2_12 httpd-2.0.58 ご存知のかた教えてください。

  • Apacheについて

    apacheのhttpd.confについてお聞きしたいことあります. httpd.confは具体的にどのような時に使用するものなのでしょうか? モジュールを追加する際に記述する必要なソースなのでしょうか? そうであれば, 拡張モジュールを追加する具体的な記述方法がよく分かっていないので,何か参考になるページがあれば教えていただきたいのですが. よろしくお願いします.

    • 締切済み
    • PHP
  • Apacheをソースからインストールした場合

    今まで、CentOSでyumからApache2系をインストールして使っていたのですが、 とある事情でソースからインストールすることにしました。 そこで質問なのですが、 ソースからインストールした場合に、 デフォルトのyumでインストールした場合のファイル&ディレクトリ構成にすることってできるのでしょうか? ソースからの場合設定ファイル等の構成が少し変わっており、 慣れの問題から、ソースからインストールしたいのですが、 その時のファイル構成をデフォルトのyumでインストールした場合と同じようにしたいと思ったのですが、可能でしょうか? よろしくお願いします。

  • apacheの設定について

    お世話になります。 現在、自宅サーバーからレンタル専用サーバーにwebサイトを移行する作業をしています。 その専用サーバーの各種デーモンはレンタル業者さんがインストールしてくれました。 そして、webアプリケーション(php)を移行してテストした所、fopen関数、mkdir関数などファイルにアクセスする関数が全て「権限なし」でエラーになりました。 調べた所、移行したファイルのパーミッションの書き込み許可は問題なく所有ユーザーとグループが「48」と表示されていました。 この「48」は元サーバー上のapacheのユーザーIDでした。 専用サーバーにはapacheのユーザー及びグループが無く「48」のユーザーIDでapacheユーザーをwebminで作成しましたが、エラーは解消されませんでした。 apacheとユーザーの関連付けが出来ていない為でしょうか? また、修正方法はございますでしょうか。 自分はapacheをインストールした時に自動的にユーザーが作成されると思っていましたが間違いですか? まだまだ素人で申し訳ございませんがご教授お願い申し上げます。