Converting the minimal Hello World and the simple example from C to C++ (actually g++ 4.4.5 on Linux Debian for Apache 2.2) took a minimal effort.
What I had to do was adding an explicit include directive for http_protocol.h, to let the less forgiving C++ compiler to properly check against a few functions. Not doing it was leading to these errors:
error: ‘ap_set_content_type’ was not declared in this scope error: ‘ap_rputs’ was not declared in this scope error: ‘ap_rprintf’ was not declared in this scopeBesides, I also removed the static specification for all the local function, and put them instead in an unnamed namespace.
Finally I wrote this Makefile:
all: mod_hello.so mod_hello.o : mod_hello.cpp g++ -c -I/path/to/apache22/include -fPIC mod_hello.cpp mod_hello.so : mod_hello.o g++ -shared -o mod_hello.so mod_hello.o clean: rm -rf mod_hello.o mod_hello.soTo build the object I called g++ with a few options:
-c because I don't want it to run the linker, its output should be the object file.
-I to specify the apache include directory (put there your actual one).
-fPIC is due to the fact that we are about to create a shared object, so we need g++ to generate position-independent code.
The actual generation of the shared object is accomplished by second call to g++, this time specifying as options:
-shared to let it know that a shared object is what we want.
-o to specify the output file name.
Remember that in a Makefile you should put TAB and only TAB (no white spaces at all!), if you don't want to get a puzzling error like this:
Makefile:6: *** missing separator. Stop.
No comments:
Post a Comment