17.5 A Simple GNU/Linux Dynamic Module
As an appetiser for working with dynamic loadable modules, here is a
minimal module written for the interface used by the loader in the
previous section:
|
#include <stdio.h>
int
run (const char *argument)
{
printf ("Hello, %s!\n", argument);
return 0;
}
|
Again, to compile on a GNU/Linux machine:
|
$ gcc -fPIC -c simple-module.c
$ gcc -shared -o simple-module.so
|
Having compiled both loader and module, a test run looks like this:
|
$ ./simple-loader simple-module World
Hello, World!
=> 0
|
If you have a GNU/Linux system, you should experiment with the
simple examples from this chapter to get a feel for the relationship
between a dynamic module loader and its modules -- tweak the interface
a little; try writing another simple module. If you have a machine with
a different dynamic loading API, try porting these examples to that
machine to get a feel for the kinds of problems you would encounter if
you wanted a module system that would work with both APIs.
The next chapter will do just that, and develop these examples into a
fully portable module loading system with the aid of GNU Autotools. In
20.1 A Module Loading Subsystem, I will add a more realistic module
loader into the Sic project last discussed in 12. A Large GNU Autotools Project.
|