| name: shared_module | |
| returns: build_tgt | |
| since: 0.37.0 | |
| description: | | |
| Builds a shared module with the given sources. | |
| This is useful for building modules that will be `dlopen()`ed and | |
| hence may contain undefined symbols that will be provided by the | |
| library that is loading it. | |
| If you want the shared module to be able to refer to functions and | |
| variables defined in the [[executable]] it is loaded by, | |
| you will need to set the `export_dynamic` argument of the executable to | |
| `true`. | |
| notes: | |
| - | | |
| *Linking to a shared module on platforms other than Android is deprecated, and will be an error | |
| in the future*. | |
| It was previously allowed because it was the only way to have a shared-library-like target that | |
| contained references to undefined symbols. However, since 0.40.0, the `override_options:` | |
| [[build_target]] keyword argument can be used to create such a [[shared_library]] by passing | |
| `override_options: 'b_lundef=false'`. Shared modules have other characteristics that make | |
| them incompatible with linking, such as a lack of SONAME. | |
| On macOS and iOS, linking to shared modules is disallowed by the linker, so we disallow it at | |
| configure time. | |
| On Android, if a shared module `foo` uses symbols from another shared module `bar`, `foo` must | |
| also be linked to `bar`. Hence, linking one shared module to another will always be allowed when | |
| building for Android. | |
| posargs_inherit: _build_target_base | |
| varargs_inherit: _build_target_base | |
| kwargs_inherit: _build_target_base | |
| kwargs: | |
| vs_module_defs: | |
| type: str | file | custom_tgt | custom_idx | |
| since: 0.52.0 | |
| description: | | |
| Specify a Microsoft module definition file for controlling symbol exports, | |
| etc., on platforms where that is possible (e.g. Windows). |