Shared libs on Unix are different from Windows in several ways:
1) dlmain is not required
2) there is no need to create a .def file. If it is public or not static, it is exported
3) there isn't a separate .lib and .dll file. It is just one .so or .sl (HPUX) file. They all begin with lib but you drop the lib and .so when linking. Ergo libibel.so becomes -libel
4) In the linker -L sets the library path
5) If you need to simulate LoadLibrary, look at dlopen etc. This isn't normally necessary unless you are doing something weird. I always thought the LoadLibrary stuff in dlmain was strange in that if has already been linked, why do you need to load it?
6) Watch out for templates. If you are working in C, no problem. If you are working in C++, use the C++ compiler to do the link. You may magically lose your template definitions if you use the linker directly.
7) When running, if it loads up the wrong stuff, use ldd (or chatr on HPUX) to find out which dlls it is trying to load. It looks at the $PATH variable so the first one it hits on the path will be loaded and may not be the one you want.
Have fun.