The following dynamic program uses a custom dynamic library which will be loaded and linked at actor start-up. It uses a function foo() which is defined in the dynamic library. This function calls a function bar() defined in the main program.
This is the dynamic program progdyn.c:
#include <chorus.h>
extern void foo();
main() {
foo(); /* calling foo defined in the library */
}
void bar() {
printf ("bar called\n");
}
This is the dynamic library libdyn.c:
#include <chorus.h>
extern void bar();
void foo() {
printf ("Calling bar\n");
bar(); /* calling bar defined in the main program */
}
Create a directory libdyndir in $WORK, containing libdyn.c and the following Imakefile:
SRCS = libdyn.c DynamicLibraryTarget (libdyn.so, libdyn.o, , , ,-Xlinker -soname=libdyn.so ) Depend(libdyn.c)
In the libdyndir directory, build the dynamic library libdyn.so using the ChorusOSMkMf, make depend, and make commands.
Create a directory progdyndir in $WORK, containing progdyn.c and the following Imakefile:
SRCS = progdyn.c
DynamicUserTarget (progdyn, progdyn.o, ,
$(WORK)/libdyndir/libdyn.so,
$(WORK)/libdyndir/libdyn.so, )
Depend()
In the progdyndir directory, build the dynamic program progdyn using the ChorusOSMkMf, make depend and make commands.
% ChorusOSMkMf $WORK % make depend % make |
Copy the dynamic program into the /bin subdirectory of the chorus_root_directory directory:
% cp $WORK/progdyndir/progdyn chorus_root_directory/bin |
Copy the dynamic library into the /lib subdirectory of the chorus_root_directory directory:
% cp $WORK/libdyndir/libdyn.so chorus_root_directory/lib |
Then, the following command will tell the runtime linker where to find the libdyn.so dynamic library:
% rsh jericho setenv LD_LIBRARY_PATH /lib |
Alternatively, set the runpath to /lib in the ldopts argument of the program macro (-rpath /lib).
Finally, the following command will start the program and dynamically load the libdyn.so library:
% rsh jericho arun /bin/progdyn |