Direct bindings can be overridden with explicit interposition. See Defining Explicit Interposition. However, cases can exist where you do not have control over establishing explicit interposition.
For example, you might deliver a family of shared objects that you would like to use direct bindings. Customers are known to be interposing on symbols that are provided by shared objects of this family. If these customers have not explicitly defined their interpositioning requirements, their interpositioning can be compromised by a re-delivery of shared objects that employ direct bindings.
Shared objects can also be designed that provide a number of default interfaces, with an expectation that users provide their own interposing routines.
To prevent disrupting existing applications, shared objects can be delivered that explicitly prevent directly binding to one or more of their interfaces.
Directly binding to a dynamic object can be prevented using one of the following options.
With the –B nodirect option. This option prevents directly binding to any interfaces that are offered by the object being built.
With the NODIRECT mapfile keyword. This keyword provides for preventing direct binding to individual symbols. This keyword is described in SYMBOL_SCOPE / SYMBOL_VERSION Directives.
An interface that is labelled as nodirect, can not be directly bound to from an external object. In addition, an interface that is labelled as nodirect, can not be directly bound to from within the same object.
The following sections describe the use of each of the direct binding prevention mechanisms.