Subject: Re: dlopen() twists
To: Jun-ichiro itojun Hagino <itojun@iijlab.net>
From: Kevin P. Neal <kpneal@pobox.com>
List: tech-userlevel
Date: 12/27/2000 18:15:51
On Tue, Dec 26, 2000 at 07:32:34PM +0900, Jun-ichiro itojun Hagino wrote:
> 	it seems to me that there are a couple of twists in dlopen() handling
> 	in NetBSD.
> 	1. static linked binaries cannot use dlopen().

I think this is a mistake.

I've run into this problem on either HP-UX or Solaris (I don't remember
details). This is actually pretty irritating. What I wanted to do was
compile an Apache binary with mod_perl (and a few other modules, including
mod_ssl). The Apache binary was supposed to be static. The problem was
I wanted Perl to be able to dynamically link in modules while mod_perl
was supposed to be linked statically.

Also, I was linking in some AFS code for authentication and authorization.
Since on HP-UX this meant I had to link in the BSD library but first I
had to link in libc, but I wanted to link in libc static and then dynamic,
then I had to include this mess in my final link:
-static -lc -lBSD -lc -dynamic -lc 

If HP-UX had been able to compile a true static binary that could do
dynamic linking anyway then I could have simplified that gunk a bit. (I
don't remember what specialness Solaris had).

I really dislike systems that cannot do true static linking, but that's
a different point. 

I think that forcing static linked binaries to not be able to use dlopen()
would be a mistake and will be a burr in someone's butt sometime in the
future. Personally I find having to link dynamically to do run-time
dynamic linking is counterintuitive. Conceptually, what do these two
things have to do with each other? 

Does anyone actually think of linking a program dynamically so they can
use dlopen()? I didn't, and was irritated when I had to link dynamically.
-- 
Kevin P. Neal                                http://www.pobox.com/~kpn/

"Nonbelievers found it difficult to defend their position in \ 
    the presense of a working computer." -- a DEC Jensen paper