Many Tcl packages come with a Makefile that builds a library archive (.a) from which ld can produce a shared object. If not, you need to identify what object files need to be included in the build. For extensions that follow normal conventions, this usually means everything except the file containing the Tcl_AppInit routine, since your library will be initialized by a Tcl command.
sgitcl>dlopen libname.so init init-routine
In this example, libname is the library name (for example, libdb.so), and init-routine is the initialization routine called by Tcl_AppInit (for example, Db_Init).
If dlopen returns the "unable to open library" message, make sure you have placed the .so file in /usr/sgitcl/lib. If so, there are probably unresolvable symbols in your library; relink the library specifying -no_unresolved to check if there are unresolvable symbols.
If dlopen returns the "no such routine init-routine" message, it indicates that the initialization routine you specified is not defined in the library. Make sure the routine was included in the object list. Some packages fold this routine into the same file as Tcl_AppInit. If this is the case you will need to edit this file to remove Tcl_AppInit (comment it out or use #ifdef's). Then add this file to the list of linked files and rebuild the library.