# LINKER - [Overview](#section130839916165622) - [Summary](#section1847008323165622) - [Files](#files) - [Macros](#define-members) - [Functions](#func-members) - [Details](#section2035573446165622) - [Function](#section1817236284165622) - [dlclose\(\)](#gaf483b6c4400965aa885f9f1a144138a5) - [dlerror\(\)](#ga541c343ae5cdf90926014c65972c86cc) - [dlopen\(\)](#gad559be443b3edb0af8835d6ec2c29a3a) - [dlsym\(\)](#ga84cb8784df910bfcc3002dc5e9e2f406) ## **Overview** **Description:** Provides functions and structures related to linking and loading. **Since:** 1.0 **Version:** 1.0 ## **Summary** ## Files

File Name

Description

dlfcn.h

Provides functions and structures related to linking and loading.

## Macros

Macro Name and Value

Description

RTLD_LAZY 1

All undefined symbols in the shared object are not resolved before dlopen() returns.

RTLD_NOW 2

All undefined symbols in the shared object are resolved before dlopen() returns.

RTLD_NOLOAD 4

The shared object is not loaded. It can be used to test whether the object resides in the memory.

RTLD_NODELETE 4096

The shared object is not deleted during dlclose().

RTLD_GLOBAL 256

The symbols defined by the loaded shared object can be resolved by other shared objects opened later.

RTLD_LOCAL 0

The symbols defined by the loaded shared object cannot be resolved by other shared objects opened later.

RTLD_NEXT ((void *)-1)

The next match of the required symbol is searched in the search order after the current object.

RTLD_DEFAULT ((void *)0)

The first match of the required symbol is searched in the default shared object search order. The search scope includes the global symbols of the program and its dependencies, and the global symbols loaded by the dlopen() function.

RTLD_DI_LINKMAP 2

The pointer to the link_map structure of the specified handle.

## Functions

Function

Description

dlclose (void *handle)

int

Closes the DLL of a specified handle.

dlerror (void)

char *

Obtains the latest error that occurred during a DLL function execution failure.

dlopen (const char *filename, int flags)

void *

Opens a DLL and returns its handle.

dlsym (void *handle, const char *symbol)

void *

Searches for a specified symbol based on the DLL handle.

## **Details** ## **Function ** ## dlclose\(\) ``` int dlclose (void * handle) ``` **Description:** Closes the DLL of a specified handle. **Parameters:**

Name

Description

handle Indicates the loaded DLL handle.
**Attention:** The symbols associated with the handle may not be removed from the caller's address space even if the **[dlclose\(\)](LINKER.md#gaf483b6c4400965aa885f9f1a144138a5)** function returns. The symbols are removed only when the reference count of the DLL is 0. The reference count is incremented \(by 1\) each time the **[dlopen\(\)](LINKER.md#gad559be443b3edb0af8835d6ec2c29a3a)** function is explicitly called. In addition, the reference of DLL depended on by other DLLs or programs will be counted if it has been implicitly loaded. A shared object can be removed from the address space only after all references are released. **Returns:** Returns **0** if the operation is successful; returns a non-zero value if the operation fails. ## dlerror\(\) ``` char* dlerror (void ) ``` **Description:** Obtains the latest error that occurred during a DLL function execution failure. **Returns:** Returns the error if occurred; returns **NULL** if the DLL function execution is successful. ## dlopen\(\) ``` void* dlopen (const char * filename, int flags ) ``` **Description:** Opens a DLL and returns its handle. **Parameters:**

Name

Description

filename Indicates the pointer to the file name of the DLL.
flags Indicates the flag of the DLL to be loaded.
**Returns:** Returns the DLL handle if the operation is successful; returns **NULL** if the operation fails. ## dlsym\(\) ``` void* dlsym (void * handle, const char * symbol ) ``` **Description:** Searches for a specified symbol based on the DLL handle. You can also use this function to obtain the loading addresses of global variables. **Parameters:**

Name

Description

handle Indicates the loaded DLL handle.
symbol Indicates the symbol name.
**Returns:** Returns the symbol address if the operation is successful; returns **NULL** if the operation fails.