Configuring and Managing MPE/iX Internet Services (July 2001)

Chapter 9 177
Apache for MPE/iX
Major Components
To create the module file “mod_hw.c” from file “mod_example.c”, log
on as MGR.APACHE so that the file is created with the right ownership:
:HELLO MGR.APACHE
:XEQ SH.HPBIN.SYS -L
shell/iX> mkdir hw
shell/iX> cd hw
shell/iX> cp /APACHE/PUB/libexec/mod_example.c mod_hw.c
Change all references inside mod_hw.c from mod_example,
example_module, example_handler, etc. to mod_hw, hw_module,
hw_handler, etc., and modify/add any other code, as needed. Creating
a separate directory for the module, such as hw, separates it from other
modules under development.
To compile a module, certain compile options must be specified and the
Apache C header files must also be included. Below, gcc creates two
object files, hw.o and mod_hw.o, using the necessary options and
include files. Use the -c option for compilation:
shell/iX> gcc -DMPE -D_POSIX_SOURCE -D_SOCKET_SOURCE
-DNO_DBM_REWRITEMAP -DUSE_HSREGEX -DEAPI -DSHARED_MODULE
-I/APACHE/PUB/include -c mod_hw.c hw.c
Next, link the module. The link steps will be different when calling
external functions that reside in archive or shared libraries. Other
examples of linking are shown later.
To link, the MPE/iX LinkEditor can be called from the CI or the
POSIX shell:
:linkedit
or
shell/iX> callci linkedit
LinkEd> buildxl xl=./mod_hw.so;limit=5
LinkEd> addxl from=./mod_hw.o,./hw.o;to=./mod_hw.so;
rl=/lib/libm.a,/lib/libc.a;merge;share
1 OBJECT FILE HAS BEEN ADDED.
The “rl=” option is used to specify which archive libraries are used to
resolve external function calls. The math library (/lib/libm.a) is
specified here to resolve pow() in mod_hw.o. /lib/libc.a is not
actually needed by the sample code. But it is a good practice to always
specify libc since most modules and other libraries are likely to need
functions from this library. If libc is not specified explicitly as shown
here, the MPE/iX C library will be used by default (LIBC.LIB.SYS).
Since Apache is built with libc, we recommend explicitly specifying
/lib/libc instead of defaulting to LIBC.LIB.SYS. /lib/libc and
LIBC.LIB.SYS are not identical. The order of the libraries listed by
rl=” is important and libc should always be specified last. The merge