[Openmcl-devel] Darwin and shared libraries

alex crain alex at widgetworks.com
Sun Mar 31 20:06:34 PST 2002


I've been digging into the openmcl sources trying to figure out the best 
way to
import external libraries under darwin.

Darwin doesn't allow dynamic linking per-se, in sense that I can't say

   dlopen ("/usr/X11R6/lib/libX11.so", ...)

What I can do is either link that lisp executable with the library at 
load time (-lX11), which works even if there are no symbol references to 
that library, or I can load
a BUNDLE, which is kind of like a shared library but not really. It's 
mostly annoying
because the various system libraries are not bundles, so I'm looking at 
an
intermediate step no matter what.

Interestingly enough, I can create a bundle with nothing in it that is 
linked to a shared
libary, ie:

% cat > foo.c
void foo () {}
^d
% cc -bundle -flat_namespace -o foo.so foo.c -L/usr/X11R6/lib -lX11

and I get all the symbols from the X11 shared library for free (again 
without an explicit reference)

As a side benefit, library carry references to their dependencies, so I 
can do this:
% cc -bundle -flat_namespace -o foo.so foo.c -L/usr/X11R6/lib -lXt

and I get all the symbols from Xt *and* X11

Which leads to the question of what to do with all this.

My inclination is to create something along the lines of
   (open-module-in-package <package-name> <path>)
which would load a module and import all of it's symbols into the 
specified
package in a single action. We could even go a step further and build 
loadable
files that contain a section for a database with the type information. 
This is simple
enough under darwin because bundle files can bundle just about anything, 
and
I think that elf ought to be able to hande it too, although I'm not sure 
how to
inspire the loader to do it.

This would require building special loadable objects, but the mechanism 
shouldn't
be too complex and the benefit would be getting all the type information 
and
structure definitions with the load.

I'm not sure how to manage all the library dependencies under LINUX, 
though. Under
darwin it would be free.

Comments?

:alex


_______________________________________________
Openmcl-devel mailing list
Openmcl-devel at clozure.com
http://clozure.com/cgi-bin/mailman/listinfo/openmcl-devel




More information about the Openmcl-devel mailing list