All previous examples assume the link-editor knows where to search for the libraries listed on the command line. By default, when linking 32–bit objects, the link-editor knows of only two standard directories in which to look for libraries, /usr/ccs/lib and /usr/lib. When linking 64–bit objects, only one standard directory is used, /usr/lib/64. All other directories to be searched must be added to the link-editor's search path explicitly.
You can change the link-editor search path in two ways: using a command-line option, or using an environment variable.
You can use the -L option to add a new path name to the library search path. This option affects the search path at the point it is encountered on the command line. For example, the following command searches path1, then /usr/ccs/lib and /usr/lib, to find libfoo. It searches path1 and then path2, and then /usr/ccs/lib and /usr/lib, to find libbar.
$ cc -o prog main.o -Lpath1 file1.c -lfoo file2.c -Lpath2 -lbar
Path names defined using the -L option are used only by the link-editor. These path names 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.
You can use the -Y option 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 following command searches for libfoo only in the directories /opt/COMPILER/lib and /home/me/lib.
$ cc -o prog main.c -YP,/opt/COMPILER/lib:/home/me/lib -lfoo
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 lists supplied on the
command line, and the second list is searched after.
The following example shows 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 is 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. In the following example the effective search path is path1:path2... pathn:dir1:dir2:/usr/ccs/lib:/usr/lib.
$ LD_LIBRARY_PATH=dir1:dir2 $ export LD_LIBRARY_PATH $ cc -o prog main.c -Lpath1 ... -Lpath2 ... -Lpathn -lfoo
This environment variable can also be used to augment the search path of the runtime linker. See Directories Searched by the Runtime Linker. To prevent this environment variable from influencing the link-editor, use the -i option.