1. Shared Objects Shared objects (a.k.a. dynamically loadable libraries) are the most common way to ship code; as you may recall, OpenSolaris deliberately removed static compilation from options available to developers (https://blogs.oracle.com/rie/entry/static_linking_where_did_it) On Linux and OpenSolaris/Illumos you will find shared objects needed by a dynamically linked executable with ldd: $ which ls /usr/bin/ls $ ldd /usr/bin/ls linux-vdso.so.1 => (0x00007fffc8dd5000) libselinux.so.1 => /lib64/libselinux.so.1 (0x00000032d7800000) librt.so.1 => /lib64/librt.so.1 (0x00000032d6800000) libcap.so.2 => /lib64/libcap.so.2 (0x00000032d9c00000) libacl.so.1 => /lib64/libacl.so.1 (0x00000032f0800000) libc.so.6 => /lib64/libc.so.6 (0x00000032d5800000) libpcre.so.1 => /lib64/libpcre.so.1 (0x00000032d7400000) libdl.so.2 => /lib64/libdl.so.2 (0x00000032d6400000) /lib64/ld-linux-x86-64.so.2 (0x00000032d5400000) libpthread.so.0 => /lib64/libpthread.so.0 (0x00000032d6000000) libattr.so.1 => /lib64/libattr.so.1 (0x00000032e9000000) (taken on tahoe.cs.dartmouth.edu, 64bit Linux) Skim "man ld.so" to know what options and configurations exist on a Unix system. On Windows, a similar role is played by .DLL files (Windows Portable Executable format, PE, is a cousin of ELF, but includes many more types of sections, such as the icon for the executable in the form of a simple bitmap). MacOS X uses the Mach-O format for executables; shared libraries are in .dylib files. Apple's "otool" has options to parse these files and find dependencies (but a verison of objdump, called gobjdump, also exists in /opt/local/bin/gobjdump and can do disassembly and section dumps to hex, see "man gobjdump"). $ file /bin/ls /bin/ls: Mach-O fat file with 2 architectures $ otool -L /bin/ls /bin/ls: /usr/lib/libncurses.5.4.dylib (compatibility version 5.4.0, current version 5.4.0) /usr/lib/libutil.dylib (compatibility version 1.0.0, current version 1.0.0) /usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 159.1.0) (works kind of like "ldd") Examine synamic symbols provided by a shared object with "nm -D" on Linux & Illumos, "nm" on MacOS X. 2. Building shared objects Read "Shared objects for the object disoriented! How to write dynamically loadable libraries" by Ashish Bansal: http://www.ibm.com/developerworks/library/l-shobj/ Have a look at "Advanced Linux Programming" Chapter 1, Sec. 1.2 and Chapter 2, Sec. 2.3. "Writing and Using Libraries". The full book is freely available: http://www.advancedlinuxprogramming.com/alp-folder/ GNU toolchain contains Libtool, which collects the many necessary options for building shared objects across different systems, making it easier to write build scripts that work on many systems: http://www.gnu.org/software/libtool/manual/libtool.html