ChorusOS 5.0 Application Developer's Guide

Dynamic Link at Application Start-up

The following dynamic application uses a custom dynamic library which will be loaded and linked at application start-up. It uses the function foo() which is defined in the dynamic library. This function calls the bar() function defined in the main application.

The following is the dynamic application progdyn.c:

#include <chorus.h> 

extern void foo();

main() {
    foo();              /* calling foo defined in the library */
}

void bar() {
    printf ("bar called\n");
}

The following 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 application */
}
Building the Dynamic Library
  1. Create the directory and the Imakefile.

    Create a directory libdyndir in $WORK, containing libdyn.c and the following Imakefile:

    SRCS = libdyn.c
    DynamicLibraryTarget (libdyn.so, libdyn.o, , , ,)
    Depend(libdyn.c)
  2. Build the dynamic library.

    In the libdyndir directory, build the dynamic library libdyn.so using the commands ChorusOSMkMf, make depend, and make.

Building the Dynamic Application
  1. Create the directory and the Imakefile.

    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(progdyn.c)
  2. Build the dynamic application.

    In the progdyndir directory, build the dynamic application progdyn using the commands ChorusOSMkMf, make depend and make.


    % ChorusOSMkMf $WORK
    % make depend
    % make
    
Running the Dynamic Application
  1. Copy the dynamic application.

    Copy the dynamic application into the /bin subdirectory of the chorus_root_directory directory:


    % cp $WORK/progdyndir/progdyn chorus_root_directory/bin 
    
  2. Copy the dynamic library.

    Copy the dynamic library into the /lib subdirectory of the chorus_root_directory directory:


    % cp $WORK/libdyndir/libdyn.so chorus_root_directory/lib 
    

    The following command will notify 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 application macro (-rpath /lib).

  3. Start the application.

    Start the application and dynamically load the libdyn.so library, using the following command:


    % rsh jericho /bin/progdyn