質問: apache再起動でエラー。mysql.hのリンクが出来てないぽいです。 分からないことがあり調べる中、 「同じ質問見つけた!」と思って喜んでいたのですが、 http://questionbox.jp.msn.com/qa5383099.html mysql.hを静的にリンクするというのが、 どうも分からないでいます。 症状としては、上記urlの症状と完全に同じで、 apacheモジュールのコンパイルはapxsで完了して、 soファイルも/usr/local/apache2/modules/下に作成されていて、 その後、apache再起動の段階で、 「mysql.h」内の関数について怒られるので、 「mysql.h」がリンク出来ていないのだろうとは思い、 環境変数にmysql.hを追加したり、 ldconfigをしたりしてみたものの、 特に変化も無く、 どうしたらいいのだろうと思っていました。 やはり、mysql.hがリンクできていないのが問題だとは思うのですが、 どうすればいいのでしょうか? 普通のモジュールをconfigureの段階で、 「disable」や「enable」を用いて静的にリンクさせるのは方法として分かりますが、 mysql.hをapacheに静的にリンクするというのはどうやるのでしょう? 宜しくお願い致します。
回答: apacheのモジュール作ったりしたことはありませんので回答とは違うと思いますが... >「mysql.h」がリンク出来ていないのだろうとは思い、 >環境変数にmysql.hを追加したり、 >ldconfigをしたりしてみたものの、 ヘッダファイルをリンクする。 というのはかなりヘンです。 コンパイルの結果できあがった実行ファイルやライブラリにヘッダファイルをリンクする。なんてはあり得ません。 掲示された回答にあるようにdlopen()等を使用して、作成したモジュール側でmysqlのライブラリを読み込み、関数ポインタを取得する。 というように修正されてはどうでしょうか。 ソースコードの修正は大変かも知れませんが... mysql側がセキリティアップデートなどで更新されれば、その恩恵が受けられるはずです。 # dlopen()での再読み込みは必要でしょうけど。 apxsでの静的リンクについては... http://www.apache.jp/pipermail/apache-users/2005-may/005335.html で質問している方がいますが...返答などはなかった...んですかね? 古い投稿な上にapacheも1.3系みたいですが。 ちなみに、静的リンクだと取り込んだ時点のモノしか使用しませんので、ライブラリの元がアップデートされた場合には再リンクが必要になります。 # ヘッダが更新されていれば再ビルド...でしょうね。