Some applications may need to use the foreign language interface. Object code is by definition machine-dependent and thus cannot be part of the saved program file.
To complicate the matter even further there are various ways of loading foreign code:
To make a runtime executable that can run on multiple platforms one 
must make runtime checks to find the correct way of linking. Suppose we 
have a source-file myextension.c defining the installation 
function install().
If this file is compiled into a shared library, load_foreign_library/1 will load this library and call the installation function to initialise the foreign code. If it is loaded as a static extension, define install() as the predicate install/0 :
static foreign_t
pl_install()
{ install();
  PL_succeed;
}
PL_extension PL_extensions [] =
{
/*{ "name",     arity,  function,       PL_FA_<flags> },*/
  { "install",  0,      pl_install,     0 },
  { NULL,       0,      NULL,           0 }     /* terminating line */
};
Now, use the following Prolog code to load the foreign library:
load_foreign_extensions :-
        current_predicate(install, install), !, % static loaded
        install.
load_foreign_extensions :-                      % shared library
        load_foreign_library(foreign(myextension)).
:- initialization load_foreign_extensions.
The path alias foreign is defined by file_search_path/2. 
By default it searches the directories <home>/lib/<arch> 
and
<home>/lib. The application can specify 
additional rules for
file_search_path/2.