[PPL-devel] Loading the SWI-Prolog interface of the PPL under Mac OS X
Roberto Bagnara
bagnara at cs.unipr.it
Sat Oct 6 21:32:34 CEST 2007
Enrico Franchi wrote:
> On Oct 6, 2007, at 5:56 PM, Roberto Bagnara wrote:
>
>> Dear Mac OS X users of the PPL,
>>
>> in view of the imminent release of PPL 0.10 we are going through
>> the TODO file.
>> One item I added some time ago to that file says:
>>
>> - In the SWI-Prolog documentation, the command to dynamically
>> load the library has to be modified so as to specify the `.so'
>> extension: this is required under Mac OS X and seems not to
>> do any harm under GNU/Linux.
>>
>> Can you please confirm that
>>
>> ?- load_foreign_library('/usr/local/lib/ppl/libppl_swiprolog').
>>
>> and
>>
>> ?- unload_foreign_library('/usr/local/lib/ppl/libppl_swiprolog').
>>
>> do not work under Mac OS X, while
>>
>> ?- load_foreign_library('/usr/local/lib/ppl/libppl_swiprolog.so').
>> ?- unload_foreign_library('/usr/local/lib/ppl/libppl_swiprolog.so').
>
> In my opinion, the problem is another one.
>
> The predicate load_foreign_language/1 uses absolute_file_name/3 to
> determine the exact name of the library to load and loads it.
> absolute_file_name determines the full file name using standard
> extensions of the host platform. Under Linux it is .so, under MacOS X
> it is .dylib
>
> However, the ppl build/installation script creates the library with
> the .so extension even on OS X. So if we call load_foreign_language
> without specifying the extension, the prolog system tries to load a
> *.dylib named file, but the file ends with .so.
>
> If the library was installed with the .dylib terminated name, it
> would work without specifying the extension. For instance, I created
> a symbolic link
>
> $ sudo ln -s /opt/local/lib/ppl/libppl_swiprolog.so /opt/local/lib/
> ppl/libppl_swiprolog.dylib
>
> then:
>
> $ swipl
> % /Users/riko/.plrc compiled 0.00 sec, 264 bytes
> Welcome to SWI-Prolog (Multi-threaded, Version 5.6.39)
> Copyright (c) 1990-2007 University of Amsterdam.
> SWI-Prolog comes with ABSOLUTELY NO WARRANTY. This is free software,
> and you are welcome to redistribute it under certain conditions.
> Please visit http://www.swi-prolog.org for details.
>
> For help, use ?- help(Topic). or ?- apropos(Word).
>
> 1 ?- load_foreign_library('/opt/local/lib/ppl/libppl_swiprolog').
> Yes
>
>
> (I have everything in /opt/... but the method works the same for /usr/)
>
>
>
> In my opinion the configuration scripts should try to use the correct
> extension for dynamic libraries on MacOS X. Of course, this is not an
> error, since OS X itselef does not rely on extensions. However, other
> programs (e.g., swiprolog) may do wrong assumptions on them, so it
> would be preferable to follow conventions.
>
> P.S. Loading the library with the full name (comprising the
> extension) works on Linux because that is the 'real' name of the
> library. However, it may not work in an environment where the library
> is installed with a different filename (I'm thinking about
> windows .dll, assuming that the build systems creates libraries with
> names ending with .dll).
I think your analysis is correct. The problem is now understanding
what are we doing wrong. I mean, in interfaces/Prolog/SWI/Makefile.am
we say
pkglib_LTLIBRARIES = libppl_swiprolog.la
nodist_libppl_swiprolog_la_SOURCES = ppl_swiprolog.cc
libppl_swiprolog_la_LIBADD = \
$(top_builddir)/src/libppl.la \
$(WATCHDOG_LIBRARY) \
@extra_libraries@
libppl_swiprolog_la_LDFLAGS = -module -avoid-version
Nowhere do we say that the extension has to be .so. I would expect
the Autotools (Autoconf, Automake and Libtool) to take care of this,
but apparently they do not. Any idea why? Do you find the string
"dylib" in the `libtool' file that you find in the build directory
just after invoking `configure'? Do you find it in
interfaces/Prolog/SWI/Makefile?
Thanks,
Roberto
--
Prof. Roberto Bagnara
Computer Science Group
Department of Mathematics, University of Parma, Italy
http://www.cs.unipr.it/~bagnara/
mailto:bagnara at cs.unipr.it
More information about the PPL-devel
mailing list