Kenwood HP 9000 Personal Computer User Manual


 
Chapter 6 207
Shared Library Management Routines
Initializers for Shared Libraries
if (shl_findsym(&hndl_foo, “in_to_cm”, TYPE_PROCEDURE,
(void *) &in_to_cm))
perror(“shl_findsym: error finding in_to_cm”), exit(1);
if (shl_findsym(&hndl_foo, “gal_to_l”, TYPE_PROCEDURE,
(void *) &gal_to_l))
perror(“shl_findsym: error finding gal_to_l”), exit(1);
if (shl_findsym(&hndl_foo, “oz_to_g”, TYPE_PROCEDURE,
(void *) &oz_to_g))
perror(“shl_findsym: errror finding oz_to_g”), exit(1);
/*
* Call routines from libfoo.sl:
*/
printf(“1.0in = %5.2fcm\n”, (*in_to_cm)(1.0));
printf(“1.0gal = %5.2fl\n”, (*gal_to_l)(1.0));
printf(“1.0oz = %5.2fg\n”, (*oz_to_g)(1.0));
/*
* Unload the library:
*/
shl_unload(hndl_foo);
}
The following is the output of running the testlib program:
Output of testlib
libfoo loaded
1.0in = 2.54cm
1.0gal = 3.79l
1.0oz = 28.35g
libfoo unloaded
Example: A Common Initializer for Multiple Libraries
Rather than have a unique initializer for each library, libraries could
have one initializer that calls the actual initialization code for each
library. To use this technique, each library declares and references the
same initializer (for example, _INITIALIZER), which calls the
appropriate initialization code for each library.
This is easily done by defining load and unload functions in each
library. When _INITIALIZER is called, it uses shl_findsym to find and
call the load or unload function (depending on the value of the loading
flag).
The following example shows the source for an _INITIALIZER function: