All previous examples assumed that the link-editor knows where to search for the libraries listed on the command-line. By default the link-editor knows of only two standard places to look for libraries, /usr/ccs/lib and /usr/lib. All other directories to be searched must be added to the link-editor's search path explicitly.
There are two ways to change the link-editor search path: using a command-line option, or using an environment variable.
The -L option can be used to add a new pathname to the library search path. This option affects the search path at the point it is encountered on the command-line. For example, the command
$ cc -o prog main.o -Lpath1 file1.c -lfoo file2.c -Lpath2 -lbar |
searches path1 (then /usr/ccs/lib and /usr/lib) to find libfoo, but searches path1 and then path2 (and then /usr/ccs/lib and /usr/lib) to find libbar.
Pathnames defined using the -L option are used only by the link-editor. They are not recorded in the output file image created for use by the runtime linker.
You must specify -L if you want the link-editor to search for libraries in your current directory. You can use a period (.) to represent the current directory.
The -Y option can be used to change the default directories searched by the link-editor. The argument supplied with this option takes the form of a colon separated list of directories. For example, the command
$ cc -o prog main.c -YP,/opt/COMPILER/lib:/home/me/lib -lfoo |
searches for libfoo only in the directories /opt/COMPILER/lib and /home/me/lib. The directories specified using the -Y option can be supplemented by using the -L option.
You can also use the environment variable LD_LIBRARY_PATH
, which takes a colon-separated list of directories, to add to the link-editor's
library search path. In its most general form, LD_LIBRARY_PATH
takes two directory lists separated by a semicolon. The first list is
searched before the list(s) supplied on the command-line, and the second list is searched
after.
Here is the combined effect of setting LD_LIBRARY_PATH
and calling the link-editor with several -L occurrences:
$ LD_LIBRARY_PATH=dir1:dir2;dir3 $ export LD_LIBRARY_PATH $ cc -o prog main.c -Lpath1 ... -Lpath2 ... -Lpathn -lfoo |
The effective search path will be dir1:dir2:path1:path2... pathn:dir3:/usr/ccs/lib:/usr/lib.
If no semicolon is specified as part of the LD_LIBRARY_PATH
definition the specified directory list is interpreted after any -L options. For example:
$ LD_LIBRARY_PATH=dir1:dir2 $ export LD_LIBRARY_PATH $ cc -o prog main.c -Lpath1 ... -Lpath2 ... -Lpathn -lfoo |
Here the effective search path will be path1:path2... pathn:dir1:dir2:/usr/ccs/lib:/usr/lib.
This environment variable can also be used to augment the search path of the runtime linker (see "Directories Searched by the Runtime Linker" for more details). To prevent this environment variable from influencing the link-editor the -i option can be used.