Apacheモジュールを追加してApacheを再起動するとエラーが発生する理由

このQ&Aのポイント
  • 作成したApacheモジュールをApacheに追加して再起動した際に、undefined symbolエラーが発生します。
  • モジュール内で使用されているmysql_queryという関数に関連するエラーです。
  • make時にはエラーが出ず、ソースコードも正しくインクルードされているため、原因は他の要素にある可能性があります。
回答を見る
  • ベストアンサー

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」に関する 上記のエラーを出してくるのでしょうか? どなたか考えられる原因を アドバイスいただけるとありがたい次第です。 以上どうぞ宜しくお願い致します。

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

  • ベストアンサー
  • trapezium
  • ベストアンサー率62% (276/442)
回答No.1

mysql_queryをダイナミックリンクしてませんか? 明示的にMySQLを静的リンクするか、dlopenするとか。

c_iamok
質問者

お礼

ありがとうございました。 明示的に静的リンクにしてみて、 改善がありました! ありがとうございました。

関連するQ&A

  • Apacheモジュールの追加方法

    ./configure --enable-module=so --enable-shared=max --activate-module= src/modules/php4/libphp4.a で、ApacheをLinuxへインストールしたのですが、mod_userdir.soがないというエラーになります。 モジュールを追加するにはどうすれば良いでしょうか? /etc/rc.d/init.d/httpd start Starting httpd: Syntax error on line 217 of /usr/local/apache/conf/httpd.conf: Cannot load /usr/local/apache/libexec/mod_userdir.so into server: /usr/local/apache/libexec/mod_user dir.so: undefined symbol: ap_os_is_path_absolute 又、Apacheはmodule=maxだとWWWサーバが 重くなるでしょうか?

  • 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で普通に書いています。

  • Apacheが起動できない!!

    初心者です(汗) Apacheを起動させようとしたら、 Syntax error on line 53 of /usr/local/apache2/conf/httpd.conf: API module structure `php5_module' in file /usr/local/apache2/modules/libphp5.so is garbled - perhaps th is is not an Apache module DSO? で2~3時間ずっと怒られています・・・。 実行環境は Apache:2.0 php:5.1.6 OS:ターボリナックス です。 PHPを入れなおして(make clean ,make distclean ・・・) いろいろ試しているのですが、お手上げ状態です。 どなたかご教授願えないでしょうか。

  • apacheの起動のときのlibphp5.soエラーで困っています。

    現在、PHPを使ったWebアプリケーションを制作しようとインストールしてるのですが、エラーが出てしまった困っています。 環境======= Fedora Cora6 Apache2.0.54 mysql4.1.13 php5.0.4 ========= ○症状 Apacheとphpをコンパイルしてインストールしたのですが、Apacheのみで動作確認したときは、apacheは動作に問題なかったのですが、PHPをインストールしてからphpinfoを見ようとApacheを起動すると動かなくなってしまいました。アクセスができないとのことですが、rootで操作しているので、何がわるのかわかりません。 ------------------------------------------------------------------- [root@localhost ~]# /usr/local/apache2/bin/apachectl start Syntax error on line 232 of /usr/local/apache2/conf/httpd.conf: Cannot load /libphp5.so into server: /libphp5.so: cannot restore segment prot after reloc: Permission denied 問題とされる ”httpd.conf”ファイルの内容: LoadModule php5_module modules/libphp5.so -------------------------------------------------------------------- 同じような症状で解決した方がおりましたら、お手数ですがご教授いただけると幸いです。 よろしくお願いいたします。

  • apache2のモジュール

    apache2のソースを入手してインストールして実行しましたが、 /usr/local/apache2/modules の中身はhttpd.expしかありません。 なのでhttpc.confのLoadModule~というのを20行ぐらいコメントアウトしました。 これは普通じゃない状態だと思います。 apache2の./configureの引数がよくなかったのでしょうか?

  • apacheが起動するとき、phpのモジュールが正常に読み込まれたかど

    apacheが起動するとき、phpのモジュールが正常に読み込まれたかどうか調べたい。 /etc/apache2/conf.d/php.confに LoadModule php4_module modules/libphp4.so と書いておりますのでapacheはphp4モジュールをロードします。 #/usr/sbin/apache2 -k start -e debug とすると、 [Wed Oct 01 09:21:10 2010] [debug] mod_so.c(246): loaded module php4_module というようにphp4のモジュールがロードされていることが分かります。 そのPHPモジュールはさらにその先のモジュール(xdebug.soやmysql.soなど)を読み込めていないときのエラーを確認したいのです。例えば/etc/php.d/mysql.iniを編集して extension=mysqlaaaaaaaaaaaaaaaa.so などと有りもしないファイル名を書いたとします。この場合にファイルが見つからないというエラーをどこかに出力させたいのですがどのようにしたらよろしいでしょうか。 上記おかしなパスの状態でphpinfo();を実行しても単にmysqlのセクションが表示されなくなっただけの状態で、エラーはかかれていません。#php -v ではエラーが表示されますが、これとapache起動時のエラーは同一ものではないですよね?! # php -v PHP Warning: Unknown(): Unable to load dynamic library '/usr/lib/php4/mysqlaaaaaaaaaaaaaaaa.so' - /usr/lib/php4/mysqlaaaaaaaaaaaaaaaa.so: cannot open shared object file: No such file or directory in Unknown on line 0 バージョン apache 2.2.3 php 4.4.8 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • apacheの起動

    apacheを起動させようとすると Cannot load /usr/local/apache/modules/mod_dav_svn.so into server: /usr/local/apache/modules/mod_dav_svn.so: undefined symbol: dav_xml_get_cdata ってでます。 mod_dav_svn.soが読み込めません、未定義のシンボルが含まれています、と読み取りましたが、どうすればよいでしょう? apacheはhttpd-2.0.59です。 よろしくお願いします。

  • Apacheを複数のhttpd.confを用いてる場合の再起動

    Apacheを複数のhttpd.confファイルを用いて運用している場合、 個々のhttpd.confを指定してのApache再起動は可能なのでしょうか? 試しに、httpd_1.confとhttpd_2.confを用いて実施してみましたけど、 エラーになってしまいました。 手順を踏まえての詳細を以下に示します。 1./usr/local/apache2/bin/apachectl -f /usr/local/apache2/conf/httpd_1.conf コマンドでApacheを起動。 2./usr/local/apache2/bin/apachectl -f /usr/local/apache2/conf/httpd_2.conf コマンドでApacheを起動。 3.その後Apacheを停止したらプロセスが残ってしまいました。

  • 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 ご存知のかた教えてください。

  • Apache1.3にmod_sslを追加インストール

    こんにちは。 まず、Apacheをインストールします。 tar zxvf apache1.3.33.tar.gz cd apache1.3.33 ./configure --enable-shared=max make make install このあとに、mod_sslを追加しようと思いインストールします。 tar zxvf mod_ssl-2.8.24-1.3.33.tar.gz cd mod_ssl-2.8.24-1.3.33 ./configure --with-apache=../apache1.3.33 --enable-ssl=/usr/local --enable-shared=max cd ../apache1.3.33 make make certificate make install そうすると下記のエラーになってしまいます。 [root@localhost apache_1.3.33]# /usr/local/apache/bin/apachectl startssl [Sat Sep 10 23:28:58 2005] [warn] Loaded DSO libexec/mod_mmap_static.so uses plain Apache 1.3 API, this module might crash under EAPI! (please recompile it with -DEAPI) ※途中削除 Syntax error on line 226 of /usr/local/apache/conf/httpd.conf: Cannot load /usr/local/apache/libexec/mod_rewrite.so into server: /usr/local/apache/libexec/mod_rewrite.so: undefined symbol: dbm_fetch /usr/local/apache/bin/apachectl startssl: httpd could not be started Apacheが入ってない状態で、mod_sslをインストールすれば上手くいくのですが。 どうしてこういうエラーが出てしまうのでしょうか? よろしくお願いします。

専門家に質問してみよう