How to generate a shared object: (Dynamically linked object library file.) Note that this is a two step process.
1. Create object code 2. Create library 3. Optional: create default version using a symbolic link. Library creation example: gcc -Wall -fPIC -c *.c gcc -shared -Wl,-soname,libctest.so.1 -o libctest.so.1.0 *.o mv libctest.so.1.0 /opt/lib ln -sf /opt/lib/libctest.so.1.0 /opt/lib/libctest.so ln -sf /opt/lib/libctest.so.1.0 /opt/lib/libctest.so.1 This creates the library libctest.so.1.0 and symbolic links to it. Compiler options: * -Wall: include warnings. See man page for warnings specified. * -fPIC: Compiler directive to output position independent code, a characteristic required by shared libraries. Also see "-fpic". * -shared: Produce a shared object which can then be linked with other objects to form an executable. * -W1: Pass options to linker. In this example the options to be passed on to the linker are: "-soname libctest.so.1". The name passed with the "-o" option is passed to gcc. * Option -o: Output of operation. In this case the name of the shared object to be output will be "libctest.so.1.0" Library Links: * The link to /opt/lib/libctest.so allows the naming convention for the compile flag -lctest to work. * The link to /opt/lib/libctest.so.1 allows the run time binding to work. See dependency below.
Compile main program and link with shared object library:
Compiling for runtime linking with a dynamically linked libctest.so.1.0: gcc -Wall -I/path/to/include-files -L/path/to/libraries prog.c -lctest -o prog Use: gcc -Wall -L/opt/lib prog.c -lctest -o prog Where the name of the library is libctest.so. (This is why you must create the symbolic links or you will get the error "/usr/bin/ld: cannot find -lctest".) The libraries will NOT be included in the executable but will be dynamically linked during runtime execution. Run Program:
* Set path: export LD_LIBRARY_PATH=/opt/lib:$LD_LIBRARY_PATH * Run: prog
2. Details to refer: Dynamic loading and un-loading of shared libraries using libdl: C++ class objects and dynamic loading: Dynamic loading of C++ classes: