A list, in which each element is a string, a pathname, or a simple Lisp expression.
The empty list.
You should not have to use this variable.
Most, if not all, Lisps supported by CFFI have a reasonable default
search algorithm for foreign libraries. For example, Lisps for
UNIX usually call
dlopen(3), which in turn looks in the system library
directories. Only if that fails does CFFI look for the named
library file in these directories, and load it from there if found.
Thus, this is intended to be a CFFI-only fallback to the library search configuration provided by your operating system. For example, if you distribute a foreign library with your Lisp package, you can add the library’s containing directory to this list and portably expect CFFI to find it.
A simple Lisp expression is intended to provide functionality commonly used in search paths such as ASDF’s13, and is defined recursively as follows:14
The result of evaluating the simple Lisp expression should yield a designator for a list of pathname designators.
Note: in Common Lisp,
#p"/foo/bar" designates the
bar file within the /foo directory whereas
#p"/foo/bar/" designates the /foo/bar directory. Keep
that in mind when customising the value of
$ ls -| liblibli.so libli.lisp
(pushnew #P"/home/sirian/lisp/libli/" *foreign-library-directories* :test #'equal) (load-foreign-library '(:default "liblibli"))
The following example would achieve the same effect:
(pushnew '(merge-pathnames #p"lisp/libli/" (user-homedir-pathname)) *foreign-library-directories* :test #'equal) ⇒ ((MERGE-PATHNAMES #P"lisp/libli/" (USER-HOMEDIR-PATHNAME))) (load-foreign-library '(:default "liblibli"))
See Using asdf to load systems in asdf: another system definition facility, for information on
mini-eval in libraries.lisp for
the source of this definition. As is always the case with a Lisp
eval, it’s easier to understand the Lisp definition than the