next up previous
Next: Finding Application files Up: Generating Runtime Applications Previous: Limitations of qsave_program

Runtimes and Foreign Code

  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 furtherm 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 defining the installation function install.

If this file is compiled to 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.



next up previous
Next: Finding Application files Up: Generating Runtime Applications Previous: Limitations of qsave_program



Passani Luca
Tue Nov 14 08:58:33 MET 1995