Subject: Re: dlopen'ing a plugin that calls functions in the parent...
To: Jasper Wallace <jasper@pointless.net>
From: Jason R Thorpe <thorpej@wasabisystems.com>
List: netbsd-users
Date: 09/05/2001 14:04:02
On Wed, Sep 05, 2001 at 09:55:06PM +0100, Jasper Wallace wrote:

 > I'm trying to get the wirless plugin[1] for gkrellm[2] to work under
 > NetBSD 1.5.2.
 > 
 > After digging around with gdb the call to dlopen() on the plugin fails with
 > (as reported dy dlerror()):
 > 
 > Error: /usr/home/jasper/.gkrellm/plugins/wireless.so: Undefined PLT symbol
 > "gkrellm_draw_decal_text" (reloc type = 7, symnum = 31)
 > 
 > gkrellm_draw_decal_text is a function in gkrellm (and gkrellm is NOT
 > striped).

gkrellm needs to be linked with the -E (--export-dyanmic) option.  That
should fix your problem.

Any program which opens a shared object that needs to call back into
the parent needs this option.  I guess maybe it's the default on Linux,
or something, because lots of programs fail to include it in their
Makefiles.

-- 
        -- Jason R. Thorpe <thorpej@wasabisystems.com>