スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

Tag:スポンサー広告 

【C++】Apache Moduleを作る際のMakefile

ApacheModuleを作る際C言語でやるならapxsコマンドが吐き出してくれるデフォルトのMakefileを使えば大抵は難なくコンパイルでき、Apacheに認識してもらえるでしょう。

でそれをC++でやりたいと思いました。

一番の大きな理由はstringを使いたいということ

でいろいろ参考にしてMakefileを作ってみました。

特に参考にさせていただいたのは

Apache API C++ Cookbook

です。

参考にしたというよりほぼこの通りだったのでこのドキュメントに出会わなければ今回は相当骨の折れることになっていたに違いないでしょう。

ただ一点だけハマりポイントがあったので、書き残すことにしました。

環境
OS:Fedora Core10
Apache:2.2.10

helloモジュールを作ってみましょう。
また今回はapxsから吐き出されるMakefileを調整してmakeしました。

まず

apxs -g -n hello

でモジュールのひな形をapxsに作ってもらいます。

そのときに作られたMakefileに手を入れていきます。

APXS=apxs
APACHECTL=apachectl

APXS_CC=`$(APXS) -q CC`
APXS_TARGET=`$(APXS) -q TARGET`
APXS_CFLAGS=`$(APXS) -q CFLAGS`
APXS_SBINDIR=`$(APXS) -q SBINDIR`
APXS_CFLAGS_SHLIB=`$(APXS) -q CFLAGS_SHLIB`
APXS_INCLUDEDIR=`$(APXS) -q INCLUDEDIR`
APXS_LD_SHLIB=`$(APXS) -q LD_SHLIB`
APXS_LIBEXECDIR=`$(APXS) -q LIBEXECDIR`
APXS_LDFLAGS_SHLIB=`$(APXS) -q LDFLAGS_SHLIB`
APXS_SYSCONFDIR=`$(APXS) -q SYSCONFDIR`
APXS_LIBS_SHLIB=`$(APXS) -q LIBS_SHLIB`

# additional defines, includes and libraries
#DEFS=-Dmy_define=my_value
#INCLUDES=-Imy/include/dir
#LIBS=-Lmy/lib/dir -lmylib

# the default target
all: mod_hello.so

# compile
# ここでg++にincludeしてもらうディレクトリの指定忘れでハマりました。
# /usr/include/apr-1/を指定しないとmakeできません。httpd.hなどからincludeされているので注意
# うっかりinclude忘れてると少し止まってしまいますよ
mod_hello.o: mod_hello.cpp
g++ -c -fPIC -I$(APXS_INCLUDEDIR) -I. -I/usr/include/apr-1/ -iquote $(APXS_CFLAGS) $(APXS_CFLAGS_SHLIB) -Wall -o $@ $<

#link
mod_hello.so: mod_hello.o
g++ -fPIC -shared -o $@ $< $(APXS_LIBS_SHLIB)

# install the shared object file into Apache
install: all
$(APXS) -i -n 'hello' mod_hello.so

# cleanup
clean:
rm -f mod_hello.o mod_hello.lo mod_hello.slo mod_hello.la

# simple test
test: reload
lynx -mime_header http://localhost/hello

# install and activate shared object by reloading Apache to
# force a reload of the shared object file
reload: install restart

start:
$(APACHECTL) start
restart:
$(APACHECTL) restart
stop:
$(APACHECTL) stop

といったMakefileを作りました。これでcppファイル(プログラム)の方で

#include

をして簡単なモジュールを作ってみてインストールに成功しました。


ポイントは

コンパイル時にincludeさせるディレクトリを正しく設定すること

ですかね

でも一度間違えばエラーを出してきてくれるのでそこまで大きな問題ではないかもしれませんね。
スポンサーサイト

Tag:C/C++  Trackback:0 comment:0 

Comment

comment form
(編集・削除用):
管理者にだけ表示を許可
プロフィール

6rats

Author:6rats
こんにちは、ITベンチャーで働くエンジニアです
主に自分の周りで起きた技術的なことをメモとして書き残して行きます。
Android以外にもRuby/Ruby on RailsやFuelPHPなどなどたまにやります。基本的なスタンスとしては興味があるもしくは必要になったらいろんなことにチャレンジします。
最近はiOSアプリ開発を始めています。

購読
follow us in feedly
個人プロダクト

Androidアプリ

Twitterクライアント

Webアプリケーション

EcPriceWatch(Amazon価格の推移を計測、最安値を知らせるサービス)
Google AdSense
ブログ村
にほんブログ村 IT技術ブログへ
にほんブログ村
ブロとも申請フォーム

この人とブロともになる

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。