Documentation

Lean.LoadDynlib

@[extern lean_load_dynlib]

Dynamically loads a shared library so that its symbols can be used by the Lean interpreter (e.g., for interpreting @[extern] declarations). Equivalent to passing --load-dynlib=path to lean.

Lean never unloads libraries. Attempting to load a library that defines symbols shared with a previously loaded library (including itself) will error. If multiple libraries share common symbols, those symbols should be linked and loaded as separate libraries.

@[extern lean_load_plugin]

Loads a Lean plugin and runs its initializers.

A Lean plugin is a shared library built from a Lean module. This means it has an initialize_<module-name> symbol that runs the module's initializers (including its imports' initializers). Initializers are declared with the initialize or builtin_initialize commands.

This is similar to passing --plugin=path to lean. Lean environment initializers, such as definitions calling registerEnvExtension, also require Lean.initializing to be true. To enable them, use loadPlugin within a withImporting block. This will set Lean.initializing (but not IO.initializing).

Lean never unloads plugins. Attempting to load a plugin that defines symbols shared with a previously loaded plugin (including itself) will error. If multiple plugins share common symbols (e.g., imports), those symbols should be linked and loaded separately.