1645c4be3SJohn Polstra.\" This source code is a product of Sun Microsystems, Inc. and is provided 2645c4be3SJohn Polstra.\" for unrestricted use provided that this legend is included on all tape 3645c4be3SJohn Polstra.\" media and as a part of the software program in whole or part. Users 4645c4be3SJohn Polstra.\" may copy or modify this source code without charge, but are not authorized 5645c4be3SJohn Polstra.\" to license or distribute it to anyone else except as part of a product or 6645c4be3SJohn Polstra.\" program developed by the user. 7645c4be3SJohn Polstra.\" 8645c4be3SJohn Polstra.\" THIS PROGRAM CONTAINS SOURCE CODE COPYRIGHTED BY SUN MICROSYSTEMS, INC. 9645c4be3SJohn Polstra.\" SUN MICROSYSTEMS, INC., MAKES NO REPRESENTATIONS ABOUT THE SUITABLITY 10645c4be3SJohn Polstra.\" OF SUCH SOURCE CODE FOR ANY PURPOSE. IT IS PROVIDED "AS IS" WITHOUT 11645c4be3SJohn Polstra.\" EXPRESS OR IMPLIED WARRANTY OF ANY KIND. SUN MICROSYSTEMS, INC. DISCLAIMS 12645c4be3SJohn Polstra.\" ALL WARRANTIES WITH REGARD TO SUCH SOURCE CODE, INCLUDING ALL IMPLIED 13645c4be3SJohn Polstra.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN 14645c4be3SJohn Polstra.\" NO EVENT SHALL SUN MICROSYSTEMS, INC. BE LIABLE FOR ANY SPECIAL, INDIRECT, 15645c4be3SJohn Polstra.\" INCIDENTAL, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING 16645c4be3SJohn Polstra.\" FROM USE OF SUCH SOURCE CODE, REGARDLESS OF THE THEORY OF LIABILITY. 17645c4be3SJohn Polstra.\" 18645c4be3SJohn Polstra.\" This source code is provided with no support and without any obligation on 19645c4be3SJohn Polstra.\" the part of Sun Microsystems, Inc. to assist in its use, correction, 20645c4be3SJohn Polstra.\" modification or enhancement. 21645c4be3SJohn Polstra.\" 22645c4be3SJohn Polstra.\" SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE 23645c4be3SJohn Polstra.\" INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY THIS 24645c4be3SJohn Polstra.\" SOURCE CODE OR ANY PART THEREOF. 25645c4be3SJohn Polstra.\" 26645c4be3SJohn Polstra.\" Sun Microsystems, Inc. 27645c4be3SJohn Polstra.\" 2550 Garcia Avenue 28645c4be3SJohn Polstra.\" Mountain View, California 94043 29645c4be3SJohn Polstra.\" 30645c4be3SJohn Polstra.\" Copyright (c) 1991 Sun Microsystems, Inc. 31645c4be3SJohn Polstra.\" 32645c4be3SJohn Polstra.\" @(#) dlopen.3 1.6 90/01/31 SMI 337f3dea24SPeter Wemm.\" $FreeBSD$ 34fbc400a6SNik Clayton.\" 35*dac0a538STijl Coosemans.Dd February 14, 2015 36645c4be3SJohn Polstra.Dt DLOPEN 3 37aa12cea2SUlrich Spörlein.Os 38645c4be3SJohn Polstra.Sh NAME 397ec37597SAlexey Zelkin.Nm dlopen , 405d8aec9cSKonstantin Belousov.Nm fdlopen , 417ec37597SAlexey Zelkin.Nm dlsym , 427ec37597SAlexey Zelkin.Nm dlfunc , 437ec37597SAlexey Zelkin.Nm dlerror , 447ec37597SAlexey Zelkin.Nm dlclose 45645c4be3SJohn Polstra.Nd programmatic interface to the dynamic linker 4625bb73e0SAlexey Zelkin.Sh LIBRARY 4725bb73e0SAlexey Zelkin.Lb libc 48645c4be3SJohn Polstra.Sh SYNOPSIS 4932eef9aeSRuslan Ermilov.In dlfcn.h 50645c4be3SJohn Polstra.Ft void * 51645c4be3SJohn Polstra.Fn dlopen "const char *path" "int mode" 52645c4be3SJohn Polstra.Ft void * 535d8aec9cSKonstantin Belousov.Fn fdlopen "int fd" "int mode" 545d8aec9cSKonstantin Belousov.Ft void * 55a4a96c81SMike Barcroft.Fn dlsym "void * restrict handle" "const char * restrict symbol" 56fda23019SGarrett Wollman.Ft dlfunc_t 57a4a96c81SMike Barcroft.Fn dlfunc "void * restrict handle" "const char * restrict symbol" 58071ab531SPietro Cerutti.Ft char * 59645c4be3SJohn Polstra.Fn dlerror "void" 60645c4be3SJohn Polstra.Ft int 61645c4be3SJohn Polstra.Fn dlclose "void *handle" 62645c4be3SJohn Polstra.Sh DESCRIPTION 63645c4be3SJohn PolstraThese functions provide a simple programmatic interface to the services of the 64645c4be3SJohn Polstradynamic linker. 65645c4be3SJohn PolstraOperations are provided to add new shared objects to a 66645c4be3SJohn Polstraprogram's address space, to obtain the address bindings of symbols 67645c4be3SJohn Polstradefined by such 68645c4be3SJohn Polstraobjects, and to remove such objects when their use is no longer required. 69645c4be3SJohn Polstra.Pp 7095f4226bSRuslan ErmilovThe 71645c4be3SJohn Polstra.Fn dlopen 7295f4226bSRuslan Ermilovfunction 73645c4be3SJohn Polstraprovides access to the shared object in 74645c4be3SJohn Polstra.Fa path , 75645c4be3SJohn Polstrareturning a descriptor that can be used for later 76645c4be3SJohn Polstrareferences to the object in calls to 77645c4be3SJohn Polstra.Fn dlsym 78645c4be3SJohn Polstraand 79645c4be3SJohn Polstra.Fn dlclose . 80645c4be3SJohn PolstraIf 81645c4be3SJohn Polstra.Fa path 82645c4be3SJohn Polstrawas not in the address space prior to the call to 83645c4be3SJohn Polstra.Fn dlopen , 84645c4be3SJohn Polstrait is placed in the address space. 85645c4be3SJohn PolstraWhen an object is first loaded into the address space in this way, its 86645c4be3SJohn Polstrafunction 87645c4be3SJohn Polstra.Fn _init , 88645c4be3SJohn Polstraif any, is called by the dynamic linker. 89645c4be3SJohn PolstraIf 90645c4be3SJohn Polstra.Fa path 91645c4be3SJohn Polstrahas already been placed in the address space in a previous call to 92645c4be3SJohn Polstra.Fn dlopen , 93645c4be3SJohn Polstrait is not added a second time, although a reference count of 94645c4be3SJohn Polstra.Fn dlopen 95645c4be3SJohn Polstraoperations on 96645c4be3SJohn Polstra.Fa path 97645c4be3SJohn Polstrais maintained. 98645c4be3SJohn PolstraA null pointer supplied for 99645c4be3SJohn Polstra.Fa path 100645c4be3SJohn Polstrais interpreted as a reference to the main 101645c4be3SJohn Polstraexecutable of the process. 1022efeeba5SRuslan ErmilovThe 103645c4be3SJohn Polstra.Fa mode 1042efeeba5SRuslan Ermilovargument 105645c4be3SJohn Polstracontrols the way in which external function references from the 106645c4be3SJohn Polstraloaded object are bound to their referents. 10707f643a5SJohn PolstraIt must contain one of the following values, possibly ORed with 10807f643a5SJohn Polstraadditional flags which will be described subsequently: 109645c4be3SJohn Polstra.Bl -tag -width RTLD_LAZYX 110645c4be3SJohn Polstra.It Dv RTLD_LAZY 111645c4be3SJohn PolstraEach external function reference is resolved when the function is first 112645c4be3SJohn Polstracalled. 113645c4be3SJohn Polstra.It Dv RTLD_NOW 114645c4be3SJohn PolstraAll external function references are bound immediately by 115645c4be3SJohn Polstra.Fn dlopen . 116645c4be3SJohn Polstra.El 117645c4be3SJohn Polstra.Pp 118645c4be3SJohn Polstra.Dv RTLD_LAZY 119645c4be3SJohn Polstrais normally preferred, for reasons of efficiency. 120645c4be3SJohn PolstraHowever, 121645c4be3SJohn Polstra.Dv RTLD_NOW 122645c4be3SJohn Polstrais useful to ensure that any undefined symbols are discovered during the 123645c4be3SJohn Polstracall to 124645c4be3SJohn Polstra.Fn dlopen . 12507f643a5SJohn Polstra.Pp 12607f643a5SJohn PolstraOne of the following flags may be ORed into the 12707f643a5SJohn Polstra.Fa mode 12807f643a5SJohn Polstraargument: 129b2e4ce45SKonstantin Belousov.Bl -tag -width RTLD_NODELETE 13007f643a5SJohn Polstra.It Dv RTLD_GLOBAL 13107f643a5SJohn PolstraSymbols from this shared object and its directed acyclic graph (DAG) 13207f643a5SJohn Polstraof needed objects will be available for resolving undefined references 13307f643a5SJohn Polstrafrom all other shared objects. 13407f643a5SJohn Polstra.It Dv RTLD_LOCAL 13507f643a5SJohn PolstraSymbols in this shared object and its DAG of needed objects will be 13607f643a5SJohn Polstraavailable for resolving undefined references only from other objects 137760d9686SRuslan Ermilovin the same DAG. 138760d9686SRuslan ErmilovThis is the default, but it may be specified 13907f643a5SJohn Polstraexplicitly with this flag. 140c6de4ce7SMaxim Sobolev.It Dv RTLD_TRACE 141c6de4ce7SMaxim SobolevWhen set, causes dynamic linker to exit after loading all objects 142c6de4ce7SMaxim Sobolevneeded by this shared object and printing a summary which includes 143c6de4ce7SMaxim Sobolevthe absolute pathnames of all objects, to standard output. 144c6de4ce7SMaxim SobolevWith this flag 145c6de4ce7SMaxim Sobolev.Fn dlopen 146c6de4ce7SMaxim Sobolevwill return to the caller only in the case of error. 147b2e4ce45SKonstantin Belousov.It Dv RTLD_NODELETE 148b2e4ce45SKonstantin BelousovPrevents unload of the loaded object on 149b2e4ce45SKonstantin Belousov.Fn dlclose . 150b2e4ce45SKonstantin BelousovThe same behaviour may be requested by 151b2e4ce45SKonstantin Belousov.Fl "z nodelete" 152b2e4ce45SKonstantin Belousovoption of the static linker 153b2e4ce45SKonstantin Belousov.Xr ld 1 . 15449e8c06bSKonstantin Belousov.It Dv RTLD_NOLOAD 155c2025a76SJoel DahlOnly return valid handle for the object if it is already loaded in 15649e8c06bSKonstantin Belousovthe process address space, otherwise 15749e8c06bSKonstantin Belousov.Dv NULL 15849e8c06bSKonstantin Belousovis returned. 15949e8c06bSKonstantin BelousovOther mode flags may be specified, which will be applied for promotion 16049e8c06bSKonstantin Belousovfor the found object. 16107f643a5SJohn Polstra.El 16207f643a5SJohn Polstra.Pp 163645c4be3SJohn PolstraIf 164645c4be3SJohn Polstra.Fn dlopen 165645c4be3SJohn Polstrafails, it returns a null pointer, and sets an error condition which may 166645c4be3SJohn Polstrabe interrogated with 167645c4be3SJohn Polstra.Fn dlerror . 168645c4be3SJohn Polstra.Pp 16995f4226bSRuslan ErmilovThe 1705d8aec9cSKonstantin Belousov.Fn fdlopen 1715d8aec9cSKonstantin Belousovfunction is similar to 1725d8aec9cSKonstantin Belousov.Fn dlopen , 1735d8aec9cSKonstantin Belousovbut it takes the file descriptor argument 1745d8aec9cSKonstantin Belousov.Fa fd , 1755d8aec9cSKonstantin Belousovwhich is used for the file operations needed to load an object 1765d8aec9cSKonstantin Belousovinto the address space. 1775d8aec9cSKonstantin BelousovThe file descriptor 1785d8aec9cSKonstantin Belousov.Fa fd 1795d8aec9cSKonstantin Belousovis not closed by the function regardless a result of execution, 1805d8aec9cSKonstantin Belousovbut a duplicate of the file descriptor is. 1815d8aec9cSKonstantin BelousovThis may be important if a 1825d8aec9cSKonstantin Belousov.Xr lockf 3 1835d8aec9cSKonstantin Belousovlock is held on the passed descriptor. 1845d8aec9cSKonstantin BelousovThe 1855d8aec9cSKonstantin Belousov.Fa fd 1865d8aec9cSKonstantin Belousovargument -1 is interpreted as a reference to the main 1875d8aec9cSKonstantin Belousovexecutable of the process, similar to 1885d8aec9cSKonstantin Belousov.Va NULL 1895d8aec9cSKonstantin Belousovvalue for the 1905d8aec9cSKonstantin Belousov.Fa name 1915d8aec9cSKonstantin Belousovargument to 1925d8aec9cSKonstantin Belousov.Fn dlopen . 1935d8aec9cSKonstantin BelousovThe 1945d8aec9cSKonstantin Belousov.Fn fdlopen 1955d8aec9cSKonstantin Belousovfunction can be used by the code that needs to perform 1965d8aec9cSKonstantin Belousovadditional checks on the loaded objects, to prevent races with 1975d8aec9cSKonstantin Belousovsymlinking or renames. 1985d8aec9cSKonstantin Belousov.Pp 1995d8aec9cSKonstantin BelousovThe 200645c4be3SJohn Polstra.Fn dlsym 20195f4226bSRuslan Ermilovfunction 202645c4be3SJohn Polstrareturns the address binding of the symbol described in the null-terminated 203645c4be3SJohn Polstracharacter string 204645c4be3SJohn Polstra.Fa symbol , 205645c4be3SJohn Polstraas it occurs in the shared object identified by 206645c4be3SJohn Polstra.Fa handle . 207645c4be3SJohn PolstraThe symbols exported by objects added to the address space by 208645c4be3SJohn Polstra.Fn dlopen 209645c4be3SJohn Polstracan be accessed only through calls to 210645c4be3SJohn Polstra.Fn dlsym . 211645c4be3SJohn PolstraSuch symbols do not supersede any definition of those symbols already present 212645c4be3SJohn Polstrain the address space when the object is loaded, nor are they available to 213645c4be3SJohn Polstrasatisfy normal dynamic linking references. 2147f244df8SJohn Polstra.Pp 2157f244df8SJohn PolstraIf 2167f244df8SJohn Polstra.Fn dlsym 2177f244df8SJohn Polstrais called with the special 218645c4be3SJohn Polstra.Fa handle 2197f244df8SJohn Polstra.Dv NULL , 2207f244df8SJohn Polstrait is interpreted as a reference to the executable or shared object 2217f244df8SJohn Polstrafrom which the call 222760d9686SRuslan Ermilovis being made. 223760d9686SRuslan ErmilovThus a shared object can reference its own symbols. 2247f244df8SJohn Polstra.Pp 2257f244df8SJohn PolstraIf 226645c4be3SJohn Polstra.Fn dlsym 2277f244df8SJohn Polstrais called with the special 2287f244df8SJohn Polstra.Fa handle 2297f244df8SJohn Polstra.Dv RTLD_DEFAULT , 2307f244df8SJohn Polstrathe search for the symbol follows the algorithm used for resolving 231760d9686SRuslan Ermilovundefined symbols when objects are loaded. 232760d9686SRuslan ErmilovThe objects searched are 2337f244df8SJohn Polstraas follows, in the given order: 2347f244df8SJohn Polstra.Bl -enum 2357f244df8SJohn Polstra.It 2367f244df8SJohn PolstraThe referencing object itself (or the object from which the call to 2377f244df8SJohn Polstra.Fn dlsym 2387f244df8SJohn Polstrais made), if that object was linked using the 239*dac0a538STijl Coosemans.Fl Bsymbolic 2407f244df8SJohn Polstraoption to 2417f244df8SJohn Polstra.Xr ld 1 . 2427f244df8SJohn Polstra.It 2437f244df8SJohn PolstraAll objects loaded at program start-up. 2447f244df8SJohn Polstra.It 2457f244df8SJohn PolstraAll objects loaded via 2467f244df8SJohn Polstra.Fn dlopen 2477f244df8SJohn Polstrawith the 2487f244df8SJohn Polstra.Dv RTLD_GLOBAL 2497f244df8SJohn Polstraflag set in the 2507f244df8SJohn Polstra.Fa mode 2517f244df8SJohn Polstraargument. 252c56864a7SPeter Pentchev.It 253c56864a7SPeter PentchevAll objects loaded via 254c56864a7SPeter Pentchev.Fn dlopen 255c56864a7SPeter Pentchevwhich are in needed-object DAGs that also contain the referencing object. 2567f244df8SJohn Polstra.El 257645c4be3SJohn Polstra.Pp 258645c4be3SJohn PolstraIf 259645c4be3SJohn Polstra.Fn dlsym 260645c4be3SJohn Polstrais called with the special 261645c4be3SJohn Polstra.Fa handle 262645c4be3SJohn Polstra.Dv RTLD_NEXT , 263645c4be3SJohn Polstrathen the search for the symbol is limited to the shared objects 264645c4be3SJohn Polstrawhich were loaded after the one issuing the call to 265645c4be3SJohn Polstra.Fn dlsym . 266645c4be3SJohn PolstraThus, if the function is called from the main program, all 267645c4be3SJohn Polstrathe shared libraries are searched. 268645c4be3SJohn PolstraIf it is called from a shared library, all subsequent shared 269645c4be3SJohn Polstralibraries are searched. 270645c4be3SJohn Polstra.Dv RTLD_NEXT 271645c4be3SJohn Polstrais useful for implementing wrappers around library functions. 272645c4be3SJohn PolstraFor example, a wrapper function 273645c4be3SJohn Polstra.Fn getpid 274645c4be3SJohn Polstracould access the 275645c4be3SJohn Polstra.Dq real 276645c4be3SJohn Polstra.Fn getpid 277645c4be3SJohn Polstrawith 278c786c636SJoerg Wunsch.Li dlsym(RTLD_NEXT, \&"getpid\&") . 279dc12134aSGarrett Wollman(Actually, the 280dc12134aSGarrett Wollman.Fn dlfunc 281dc12134aSGarrett Wollmaninterface, below, should be used, since 282dc12134aSGarrett Wollman.Fn getpid 283dc12134aSGarrett Wollmanis a function and not a data object.) 284645c4be3SJohn Polstra.Pp 2857ec37597SAlexey ZelkinIf 2867ec37597SAlexey Zelkin.Fn dlsym 2877ec37597SAlexey Zelkinis called with the special 2887ec37597SAlexey Zelkin.Fa handle 2897ec37597SAlexey Zelkin.Dv RTLD_SELF , 2907ec37597SAlexey Zelkinthen the search for the symbol is limited to the shared object 2917ec37597SAlexey Zelkinissuing the call to 2927ec37597SAlexey Zelkin.Fn dlsym 2937ec37597SAlexey Zelkinand those shared objects which were loaded after it. 2947ec37597SAlexey Zelkin.Pp 29595f4226bSRuslan ErmilovThe 2967f244df8SJohn Polstra.Fn dlsym 29795f4226bSRuslan Ermilovfunction 2987f244df8SJohn Polstrareturns a null pointer if the symbol cannot be found, and sets an error 2997f244df8SJohn Polstracondition which may be queried with 3007f244df8SJohn Polstra.Fn dlerror . 3017f244df8SJohn Polstra.Pp 30295f4226bSRuslan ErmilovThe 303dc12134aSGarrett Wollman.Fn dlfunc 30495f4226bSRuslan Ermilovfunction 305dc12134aSGarrett Wollmanimplements all of the behavior of 306dc12134aSGarrett Wollman.Fn dlsym , 307dc12134aSGarrett Wollmanbut has a return type which can be cast to a function pointer without 308dc12134aSGarrett Wollmantriggering compiler diagnostics. 30995f4226bSRuslan Ermilov(The 31095f4226bSRuslan Ermilov.Fn dlsym 31195f4226bSRuslan Ermilovfunction 312dc12134aSGarrett Wollmanreturns a data pointer; in the C standard, conversions between 313760d9686SRuslan Ermilovdata and function pointer types are undefined. 314760d9686SRuslan ErmilovSome compilers and 315dc12134aSGarrett Wollman.Xr lint 1 316760d9686SRuslan Ermilovutilities warn about such casts.) 317dc12134aSGarrett WollmanThe precise return type of 318dc12134aSGarrett Wollman.Fn dlfunc 319dc12134aSGarrett Wollmanis unspecified; applications must cast it to an appropriate function pointer 320dc12134aSGarrett Wollmantype. 321dc12134aSGarrett Wollman.Pp 32295f4226bSRuslan ErmilovThe 323645c4be3SJohn Polstra.Fn dlerror 32495f4226bSRuslan Ermilovfunction 325645c4be3SJohn Polstrareturns a null-terminated character string describing the last error that 326645c4be3SJohn Polstraoccurred during a call to 327645c4be3SJohn Polstra.Fn dlopen , 328e8598335SAlexey Zelkin.Fn dladdr , 329e8598335SAlexey Zelkin.Fn dlinfo , 330645c4be3SJohn Polstra.Fn dlsym , 331dc12134aSGarrett Wollman.Fn dlfunc , 332645c4be3SJohn Polstraor 333645c4be3SJohn Polstra.Fn dlclose . 334645c4be3SJohn PolstraIf no such error has occurred, 335645c4be3SJohn Polstra.Fn dlerror 336645c4be3SJohn Polstrareturns a null pointer. 337645c4be3SJohn PolstraAt each call to 338645c4be3SJohn Polstra.Fn dlerror , 339760d9686SRuslan Ermilovthe error indication is reset. 340760d9686SRuslan ErmilovThus in the case of two calls 341645c4be3SJohn Polstrato 342645c4be3SJohn Polstra.Fn dlerror , 343645c4be3SJohn Polstrawhere the second call follows the first immediately, the second call 344645c4be3SJohn Polstrawill always return a null pointer. 345645c4be3SJohn Polstra.Pp 34695f4226bSRuslan ErmilovThe 347645c4be3SJohn Polstra.Fn dlclose 34895f4226bSRuslan Ermilovfunction 349645c4be3SJohn Polstradeletes a reference to the shared object referenced by 350645c4be3SJohn Polstra.Fa handle . 351645c4be3SJohn PolstraIf the reference count drops to 0, the object is removed from the 352645c4be3SJohn Polstraaddress space, and 353645c4be3SJohn Polstra.Fa handle 354645c4be3SJohn Polstrais rendered invalid. 355645c4be3SJohn PolstraJust before removing a shared object in this way, the dynamic linker 356645c4be3SJohn Polstracalls the object's 357645c4be3SJohn Polstra.Fn _fini 358645c4be3SJohn Polstrafunction, if such a function is defined by the object. 359645c4be3SJohn PolstraIf 360645c4be3SJohn Polstra.Fn dlclose 361645c4be3SJohn Polstrais successful, it returns a value of 0. 362645c4be3SJohn PolstraOtherwise it returns -1, and sets an error condition that can be 363645c4be3SJohn Polstrainterrogated with 364645c4be3SJohn Polstra.Fn dlerror . 365645c4be3SJohn Polstra.Pp 366645c4be3SJohn PolstraThe object-intrinsic functions 367645c4be3SJohn Polstra.Fn _init 368645c4be3SJohn Polstraand 369645c4be3SJohn Polstra.Fn _fini 370645c4be3SJohn Polstraare called with no arguments, and are not expected to return values. 371f28529d7SJoseph Koshy.Sh NOTES 372f28529d7SJoseph KoshyELF executables need to be linked 373f28529d7SJoseph Koshyusing the 374f28529d7SJoseph Koshy.Fl export-dynamic 375f28529d7SJoseph Koshyoption to 376f28529d7SJoseph Koshy.Xr ld 1 377f28529d7SJoseph Koshyfor symbols defined in the executable to become visible to 378f28529d7SJoseph Koshy.Fn dlsym . 379c786c636SJoerg Wunsch.Pp 380c786c636SJoerg WunschIn previous implementations, it was necessary to prepend an underscore 381c786c636SJoerg Wunschto all external symbols in order to gain symbol 382760d9686SRuslan Ermilovcompatibility with object code compiled from the C language. 383760d9686SRuslan ErmilovThis is 384c786c636SJoerg Wunschstill the case when using the (obsolete) 385c786c636SJoerg Wunsch.Fl aout 386c786c636SJoerg Wunschoption to the C language compiler. 387645c4be3SJohn Polstra.Sh ERRORS 38895f4226bSRuslan ErmilovThe 389dc12134aSGarrett Wollman.Fn dlopen , 3905d8aec9cSKonstantin Belousov.Fn fdlopen , 391dc12134aSGarrett Wollman.Fn dlsym , 392645c4be3SJohn Polstraand 393dc12134aSGarrett Wollman.Fn dlfunc 39495f4226bSRuslan Ermilovfunctions 395dc12134aSGarrett Wollmanreturn a null pointer in the event of errors. 39695f4226bSRuslan ErmilovThe 397645c4be3SJohn Polstra.Fn dlclose 39895f4226bSRuslan Ermilovfunction 399645c4be3SJohn Polstrareturns 0 on success, or -1 if an error occurred. 400645c4be3SJohn PolstraWhenever an error has been detected, a message detailing it can be 401645c4be3SJohn Polstraretrieved via a call to 402645c4be3SJohn Polstra.Fn dlerror . 403645c4be3SJohn Polstra.Sh SEE ALSO 404645c4be3SJohn Polstra.Xr ld 1 , 405645c4be3SJohn Polstra.Xr rtld 1 , 4064088069cSDima Dorfman.Xr dladdr 3 , 4077ec37597SAlexey Zelkin.Xr dlinfo 3 , 408645c4be3SJohn Polstra.Xr link 5 409