Static executable with shared modules

2005-01-14 Thread Rickard Lind
Is there any way to build the python executable statically and
still be able to load modules built as shared libraries?
I'm trying to run python scripts on a stripped down FreeBSD (4.9)
machine which has no shared system libraries so I want to link it
statically against libc et al, but it would be nice to still be
able to load modules which were built as shared libraries. In
particular I have a library for which I've generated a wrapper
with swig which I'd like to import.
I've googled up and down but can't find anyone who has tried this
particular combination. Just adding a -static to the Makefile
seems to remove the ability to load shared libraries altogether
as I get a "ImportError: Service unavailable" exception.
/r
--
http://mail.python.org/mailman/listinfo/python-list


Re: Static executable with shared modules

2005-01-17 Thread Rickard Lind
Martin v. Löwis wrote:
> I'm not what "build statically" means; if you talking about
> building a statically linked interpreter binary - then no,
> this is not possible. At a minimum, you need to link with -ldl,
> or else you cannot perform dlopen(3).
I'll be more specific: when I build python 2.3.4 on FreeBSD 4.9,
the interpreter binary is linked against three shared libraries: 
libutil.so.3, libm.so.2 and libc_r.so.4. Now, these libraries are
not present on the TARGET system (which is distinct from the build
system, but based on the same version of FreeBSD) so I add "-static"
to LDFLAGS. This produces an interpreter that runs on the target
system (no dependency on shared libc etc) but it also cannot load
modules compiled as shared libraries. Man page for dlopen(3) says
it is located in libc (and consquently there seems to be no libdl),
and anyway I'd expect to get a link error if the dl* functions were
not present. What I DO get is an ImportError exception.

At present I see no other option than to link the modules into the
interpreter which is very inconvenient since I'll have to rebuild
the every time a module changes :-(
/r
--
http://mail.python.org/mailman/listinfo/python-list