The difference between PATH and LD_LIBRARY_PATH

path

I am having some difficulties understanding the difference between PATH and LD_LIBRARY_PATH. I have an installation setup that needs a file pkg.tcl and I am not where to add the path to it: should it be to PATH or LD_LIBRARY_PATH?

Best Answer

Unix systems tend to be organized with different types of files spread over different directories. For example, executables are usually in directories called bin (/bin, /usr/bin, /usr/local/bin, …); historically, bin stood for binary, because the executables are binaries (machine code), but there can be scripts as well. Since there are several directories that contain executables, and it's useful to add and remove directories on the fly (e.g. to test a multi-executable application, you temporarily add it to the search path for executables), there is an environment variable for that: PATH. When you execute a program by giving its name, the shell looks it up in the directories mentioned in the PATH variable (it's a colon-separated list of directories).

The same mechanism exists for other types of files that some program is going to search for by name. Here are a few typical PATH-like variables (note that the example paths that I give aren't exactly what you'll find on your system, there' just there to give an idea).

  • PATH: executables (e.g. /home/username/bin:/usr/local/bin:/usr/bin:/bin).
  • MANPATH: manual pages (e.g. /usr/local/man:/usr/man).
  • LD_LIBRARY_PATH: native code libraries (on Linux, in addition to the value of this variable, the lookup path typically contains /usr/local/lib, /usr/lib, /lib and a few others). The name LD comes from dynamic loader, the system component that loads libraries into dynamically linked executables.
  • PERL5LIB: Perl libraries (e.g. /usr/local/lib/site-perl:/usr/lib/site-perl:/usr/lib/perl:/usr/share/perl).
  • PYTHONPATH: Python libraries (e.g. /usr/local/lib/python:/usr/lib/python:/usr/lib/python2.6).
  • TCLLIBPATH: TCL libraries (e.g. /usr/local/lib/tcltk:/usr/lib/tcltk).

So if your pkg.tcl is a standalone executable, give it execution permissions and drop it somewhere in $PATH. If it's a TCL library loaded by a TCL program, drop it somewhere in $TCLLIBPATH.

Related Question