]> git.saurik.com Git - apple/dyld.git/blame_incremental - doc/man/man1/dyld.1
dyld-360.22.tar.gz
[apple/dyld.git] / doc / man / man1 / dyld.1
... / ...
CommitLineData
1.TH DYLD 1 "December 14, 2009" "Apple Inc."
2.SH NAME
3dyld \- the dynamic link editor
4.SH SYNOPSIS
5DYLD_FRAMEWORK_PATH
6.br
7DYLD_FALLBACK_FRAMEWORK_PATH
8.br
9DYLD_VERSIONED_FRAMEWORK_PATH
10.br
11DYLD_LIBRARY_PATH
12.br
13DYLD_FALLBACK_LIBRARY_PATH
14.br
15DYLD_VERSIONED_LIBRARY_PATH
16.br
17DYLD_PRINT_TO_FILE
18.br
19DYLD_ROOT_PATH
20.br
21DYLD_SHARED_REGION
22.br
23DYLD_INSERT_LIBRARIES
24.br
25DYLD_FORCE_FLAT_NAMESPACE
26.br
27DYLD_IMAGE_SUFFIX
28.br
29DYLD_PRINT_OPTS
30.br
31DYLD_PRINT_ENV
32.br
33DYLD_PRINT_LIBRARIES
34.br
35DYLD_PRINT_LIBRARIES_POST_LAUNCH
36.br
37DYLD_BIND_AT_LAUNCH
38.br
39DYLD_DISABLE_DOFS
40.br
41DYLD_PRINT_APIS
42.br
43DYLD_PRINT_BINDINGS
44.br
45DYLD_PRINT_INITIALIZERS
46.br
47DYLD_PRINT_REBASINGS
48.br
49DYLD_PRINT_SEGMENTS
50.br
51DYLD_PRINT_STATISTICS
52.br
53DYLD_PRINT_DOFS
54.br
55DYLD_PRINT_RPATHS
56.br
57DYLD_SHARED_CACHE_DIR
58.br
59DYLD_SHARED_CACHE_DONT_VALIDATE
60.SH DESCRIPTION
61The dynamic linker uses the following environment variables.
62They affect any program that uses the dynamic linker.
63.TP
64.B DYLD_FRAMEWORK_PATH
65This is a colon separated list of directories that contain frameworks.
66The dynamic linker searches these directories before it searches for the
67framework by its install name.
68It allows you to test new versions of existing
69frameworks. (A framework is a library install name that ends in the form
70XXX.framework/Versions/YYY/XXX or XXX.framework/XXX, where XXX and YYY are any
71name.)
72.IP
73For each framework that a program uses, the dynamic linker looks for the
74framework in each directory in
75.SM DYLD_FRAMEWORK_PATH
76in turn. If it looks in all the directories and can't find the framework, it
77searches the directories in
78.SM DYLD_LIBRARY_PATH
79in turn. If it still can't find the framework, it then searches
80.SM DYLD_FALLBACK_FRAMEWORK_PATH
81and
82.SM DYLD_FALLBACK_LIBRARY_PATH
83in turn.
84.IP
85Use the
86.B \-L
87option to
88.IR otool (1).
89to discover the frameworks and shared libraries that the executable
90is linked against.
91.TP
92.B DYLD_FALLBACK_FRAMEWORK_PATH
93This is a colon separated list of directories that contain frameworks.
94It is used as the default location for frameworks not found in their install
95path.
96
97By default, it is set to
98/Library/Frameworks:/Network/Library/Frameworks:/System/Library/Frameworks
99.TP
100.B DYLD_VERSIONED_FRAMEWORK_PATH
101This is a colon separated list of directories that contain potential override frameworks.
102The dynamic linker searches these directories for frameworks. For
103each framework found dyld looks at its LC_ID_DYLIB and gets the current_version
104and install name. Dyld then looks for the framework at the install name path.
105Whichever has the larger current_version value will be used in the process whenever
106a framework with that install name is required. This is similar to DYLD_FRAMEWORK_PATH
107except instead of always overriding, it only overrides is the supplied framework is newer.
108Note: dyld does not check the framework's Info.plist to find its version. Dyld only
109checks the -currrent_version number supplied when the framework was created.
110.TP
111.B DYLD_LIBRARY_PATH
112This is a colon separated list of directories that contain libraries. The
113dynamic linker searches these directories before it searches the default
114locations for libraries. It allows you to test new versions of existing
115libraries.
116.IP
117For each library that a program uses, the dynamic linker looks for it in each
118directory in
119.SM DYLD_LIBRARY_PATH
120in turn. If it still can't find the library, it then searches
121.SM DYLD_FALLBACK_FRAMEWORK_PATH
122and
123.SM DYLD_FALLBACK_LIBRARY_PATH
124in turn.
125.IP
126Use the
127.B \-L
128option to
129.IR otool (1).
130to discover the frameworks and shared libraries that the executable
131is linked against.
132.TP
133.B DYLD_FALLBACK_LIBRARY_PATH
134This is a colon separated list of directories that contain libraries.
135It is used as the default location for libraries not found in their install
136path.
137By default, it is set
138to $(HOME)/lib:/usr/local/lib:/lib:/usr/lib.
139.TP
140.B DYLD_VERSIONED_LIBRARY_PATH
141This is a colon separated list of directories that contain potential override libraries.
142The dynamic linker searches these directories for dynamic libraries. For
143each library found dyld looks at its LC_ID_DYLIB and gets the current_version
144and install name. Dyld then looks for the library at the install name path.
145Whichever has the larger current_version value will be used in the process whenever
146a dylib with that install name is required. This is similar to DYLD_LIBRARY_PATH
147except instead of always overriding, it only overrides is the supplied library is newer.
148.TP
149.B DYLD_PRINT_TO_FILE
150This is a path to a (writable) file. Normally, the dynamic linker writes all
151logging output (triggered by DYLD_PRINT_* settings) to file descriptor 2
152(which is usually stderr). But this setting causes the dynamic linker to
153write logging output to the specified file.
154.TP
155.B DYLD_ROOT_PATH
156This is a colon separated list of directories. The dynamic linker will prepend each of
157this directory paths to every image access until a file is found.
158.TP
159.B DYLD_SHARED_REGION
160This can be "use" (the default), "avoid", or "private". Setting it to
161"avoid" tells dyld to not use the shared cache. All OS dylibs are loaded
162dynamically just like every other dylib. Setting it to "private" tells
163dyld to remove the shared region from the process address space and mmap()
164back in a private copy of the dyld shared cache in the shared region address
165range. This is only useful if the shared cache on disk has been updated
166and is different than the shared cache in use.
167.TP
168.B DYLD_INSERT_LIBRARIES
169This is a colon separated list of dynamic libraries to load before the ones
170specified in the program. This lets you test new modules of existing dynamic
171shared libraries that are used in flat-namespace images by loading a temporary
172dynamic shared library with just the new modules. Note that this has no
173effect on images built a two-level namespace images using a dynamic shared
174library unless
175.SM DYLD_FORCE_FLAT_NAMESPACE
176is also used.
177.TP
178.B DYLD_FORCE_FLAT_NAMESPACE
179Force all images in the program to be linked as flat-namespace images and ignore
180any two-level namespace bindings. This may cause programs to fail to execute
181with a multiply defined symbol error if two-level namespace images are used to
182allow the images to have multiply defined symbols.
183.TP
184.B DYLD_IMAGE_SUFFIX
185This is set to a string of a suffix to try to be used for all shared libraries
186used by the program. For libraries ending in ".dylib" the suffix is applied
187just before the ".dylib". For all other libraries the suffix is appended to the
188library name. This is useful for using conventional "_profile" and "_debug"
189libraries and frameworks.
190.TP
191.B DYLD_PRINT_OPTS
192When this is set, the dynamic linker writes to file descriptor 2 (normally
193standard error) the command line options.
194.TP
195.B DYLD_PRINT_ENV
196When this is set, the dynamic linker writes to file descriptor 2 (normally
197standard error) the environment variables.
198.TP
199.B DYLD_PRINT_LIBRARIES
200When this is set, the dynamic linker writes to file descriptor 2 (normally
201standard error) the filenames of the libraries the program is using.
202This is useful to make sure that the use of
203.SM DYLD_LIBRARY_PATH
204is getting what you want.
205.TP
206.B DYLD_PRINT_LIBRARIES_POST_LAUNCH
207This does the same as
208.SM DYLD_PRINT_LIBRARIES
209but the printing starts after the program gets to its entry point.
210.TP
211.B DYLD_BIND_AT_LAUNCH
212When this is set, the dynamic linker binds all undefined symbols
213the program needs at launch time. This includes function symbols that can are normally
214lazily bound at the time of their first call.
215.TP
216.B DYLD_PRINT_STATISTICS
217Right before the process's main() is called, dyld prints out information about how
218dyld spent its time. Useful for analyzing launch performance.
219.TP
220.B DYLD_DISABLE_DOFS
221Causes dyld not register dtrace static probes with the kernel.
222.TP
223.B DYLD_PRINT_INITIALIZERS
224Causes dyld to print out a line when running each initializers in every image. Initializers
225run by dyld included constructors for C++ statically allocated objects, functions marked with
226__attribute__((constructor)), and -init functions.
227.TP
228.B DYLD_PRINT_APIS
229Causes dyld to print a line whenever a dyld API is called (e.g. NSAddImage()).
230.TP
231.B DYLD_PRINT_SEGMENTS
232Causes dyld to print out a line containing the name and address range of each mach-o segment
233that dyld maps. In addition it prints information about if the image was from the dyld
234shared cache.
235.TP
236.B DYLD_PRINT_BINDINGS
237Causes dyld to print a line each time a symbolic name is bound.
238.TP
239.B DYLD_PRINT_DOFS
240Causes dyld to print out information about dtrace static probes registered with the kernel.
241.TP
242.B DYLD_PRINT_RPATHS
243Cause dyld to print a line each time it expands an @rpath variable and whether
244that expansion was successful or not.
245.TP
246.B DYLD_SHARED_CACHE_DIR
247This is a directory containing dyld shared cache files. This variable can be used in
248conjunction with DYLD_SHARED_REGION=private and DYLD_SHARED_CACHE_DONT_VALIDATE
249to run a process with an alternate shared cache.
250.TP
251.B DYLD_SHARED_CACHE_DONT_VALIDATE
252Causes dyld to not check that the inode and mod-time of files in the shared cache match
253the requested dylib on disk. Thus a program can be made to run with the dylib in the
254shared cache even though the real dylib has been updated on disk.
255.TP
256.SH DYNAMIC LIBRARY LOADING
257Unlike many other operating systems, Darwin does not locate dependent dynamic libraries
258via their leaf file name. Instead the full path to each dylib is used (e.g. /usr/lib/libSystem.B.dylib).
259But there are times when a full path is not appropriate; for instance, may want your
260binaries to be installable in anywhere on the disk.
261To support that, there are three @xxx/ variables that can be used as a path prefix. At runtime dyld
262substitutes a dynamically generated path for the @xxx/ prefix.
263.TP
264.B @executable_path/
265This variable is replaced with the path to the directory containing the main executable for
266the process. This is useful for loading dylibs/frameworks embedded in a .app directory.
267If the main executable file is at /some/path/My.app/Contents/MacOS/My and a framework dylib
268file is at /some/path/My.app/Contents/Frameworks/Foo.framework/Versions/A/Foo, then
269the framework load path could be encoded as
270@executable_path/../Frameworks/Foo.framework/Versions/A/Foo and the .app directory could be
271moved around in the file system and dyld will still be able to load the embedded framework.
272.TP
273.B @loader_path/
274This variable is replaced with the path to the directory containing the mach-o binary which
275contains the load command using @loader_path. Thus, in every binary, @loader_path resolves to
276a different path, whereas @executable_path always resolves to the same path. @loader_path is
277useful as the load path for a framework/dylib embedded in a plug-in, if the final file
278system location of the plugin-in unknown (so absolute paths cannot be used) or if the plug-in
279is used by multiple applications (so @executable_path cannot be used). If the plug-in mach-o
280file is at /some/path/Myfilter.plugin/Contents/MacOS/Myfilter and a framework dylib
281file is at /some/path/Myfilter.plugin/Contents/Frameworks/Foo.framework/Versions/A/Foo, then
282the framework load path could be encoded as
283@loader_path/../Frameworks/Foo.framework/Versions/A/Foo and the Myfilter.plugin directory could
284be moved around in the file system and dyld will still be able to load the embedded framework.
285.TP
286.B @rpath/
287Dyld maintains a current stack of paths called the run path list. When @rpath is encountered
288it is substituted with each path in the run path list until a loadable dylib if found.
289The run path stack is built from the LC_RPATH load commands in the depencency chain
290that lead to the current dylib load.
291You can add an LC_RPATH load command to an image with the -rpath option to ld(1). You can
292even add a LC_RPATH load command path that starts with @loader_path/, and it will push a path
293on the run path stack that relative to the image containing the LC_RPATH.
294The use of @rpath is most useful when you have a complex directory structure of programs and
295dylibs which can be installed anywhere, but keep their relative positions. This scenario
296could be implemented using @loader_path, but every client of a dylib could need a different
297load path because its relative position in the file system is different. The use of @rpath
298introduces a level of indirection that simplies things. You pick a location in your directory
299structure as an anchor point. Each dylib then gets an install path that starts with @rpath
300and is the path to the dylib relative to the anchor point. Each main executable is linked
301with -rpath @loader_path/zzz, where zzz is the path from the executable to the anchor point.
302At runtime dyld sets it run path to be the anchor point, then each dylib is found relative
303to the anchor point.
304.SH "SEE ALSO"
305libtool(1), ld(1), otool(1)