Next: , Previous: , Up: Libraries   [Contents][Index]




Macro: define-foreign-library name-and-options { load-clause }* ⇒ name

name-and-options ::= name | (name &key canary convention search-path)
load-clause ::= (feature library &key convention search-path)

Arguments and Values


A symbol.


A feature expression.


A library designator.


A string denoting a foreign symbol that will be searched in core before attempting to load the library. If that symbol is found, the library is assumed to be statically linked and load-foreign-library only marks the library as loaded.

Some implementations (Clisp, ECL, SBCL) natively support static linking, sometimes referred to as a link kit.


One of :cdecl (default) or :stdcall


A path or list of paths where the library will be searched if not found in system-global directories. Paths specified in a load clause take priority over paths specified as library option, with *foreign-library-directories* having lowest priority.


Creates a new library designator called name. The load-clauses describe how to load that designator when passed to load-foreign-library or use-foreign-library.

When trying to load the library name, the relevant function searches the load-clauses in order for the first one where feature evaluates to true. That happens for any of the following situations:

  1. If feature is a symbol present in common-lisp:*features*.
  2. If feature is a list, depending on (first feature), a keyword:

    All of the feature expressions in (rest feature) are true.


    At least one of the feature expressions in (rest feature) is true.


    The feature expression (second feature) is not true.

  3. Finally, if feature is t, this load-clause is picked unconditionally.

Upon finding the first true feature, the library loader then loads the library. The meaning of “library designator” is described in load-foreign-library.

Functions associated to a library defined by define-foreign-library (e.g. through defcfun’s :library option, will inherit the library’s options. The precedence is as follows:

  1. defcfun/foreign-funcall specific options;
  2. load-clause options;
  3. global library options (the name-and-options argument)


See Loading foreign libraries.

See Also


Next: , Previous: , Up: Libraries   [Contents][Index]