Run time linker and library symbols

Did you know that almost all programs are incomplete until you start them? When programmers compile a program, it is only partially complete. When you start a program, the operating system looks at the program and runs another program to make it complete — called a run time linker. In the case of modern Linux, it’s usually /lib/ld-linux.so.2. Read the manpage on ‘ld.so‘ for more information.

  • You can find out what libraries your program uses with ldd /path/to/program. You can also run it as follows (assuming you’re using bash/ksh/zsh): LD_DEBUG=files program
  • Find out what symbols a program uses and from which shared libraries: LD_DEBUG=bindings program
  • Have you ever wanted to find out what shared library contains the code or definition for a function or symbol? David Wheeler shows how you can find it: nm -o /lib/* /usr/lib/*/* | grep symbol_name Then look for the capital “T”. Read the Program Library HOWTO by David Wheeler.

Linux versus Solaris

Here are some reasons why I like Linux better than Solaris:

  • Easier to use. Linux is pre-configured with user-friendly defaults compared to Solaris 10.
  • Better desktop support. In Fedora Core, or in SUSE, I can insert a USB flash drive, and it automatically appears on my desktop. Not so with Solaris 10.
  • Default shell is bash. Much better than vanilla ‘sh’.
  • Good aliases including ‘ll’
  • Good default command-line prompt.
  • Fantastic GNU command line and console programs
    • tar -zxvf whatever.tar.gz
    • find … -print 0 | xargs -0 …
    • vim
  • Root’s shell is bash, and the home directory is /root instead of /
  • Linux configuration utilities are more plentiful and easier to use.
  • Gnome is far better on Linux. The Sun “Java Desktop” (Gnome renamed), is an improvement over CDE, but is not even close to mainstream Linux distributions in terms of ease of use and features.
  • More knowledge “in the wild” for Linux than for Solaris. Easier to find support for Linux using Google.

Solaris is my favorite commercial UNIX. I prefer it over AIX, HP-UX, etc.