[Dovecot] dovecot-auth consumes 100% CPU time on Solaris 10

Mike Brudenell pmb1 at york.ac.uk
Thu Nov 29 12:46:47 EET 2007


Greetings -

On 29 Nov 2007, at 09:24, Mark Heitmann wrote:

> In my $LD_LIBRARY_PATH /usr/lib is behind /usr/local/lib (for  
> openldap), although
> dovecot-auth was linked with the Solaris lib. The way that works for  
> me is the
> following LDFLAGS directive to the configure command, because the -- 
> with-ldap
> flag has no directory option:
>
> LDFLAGS=-L"/usr/local/BerkeleyDB/lib -L/usr/local/lib /usr/local/lib/ 
> libldap-2.4.so.2"
>
> Is there a smarter way to link with the right lib and ignore the  
> solaris one?

We used to have terrible problems similar to yours when trying to use  
LD_LIBRARY_PATH.  We now tend to use the "-R" option as well when  
compiling to specify unusual/specific library directories...

I think I have the following right:

  * "-l libraryname" searches in an ordered list of locations for a  
library
    named "libraryname".

  * "-L dirname" augments the above ordered list of locations with the
    directory "dirname".

If the library is a non-shared one then the above should suffice: the  
library routines needed by your program are hauled into the resulting  
executable and stored there.

However if, as is often the case, the libraries are instead shared  
(ie, have a ".so" suffix) then their code is NOT hauled into the  
executable, but is instead pulled in when the executable is actually  
run.  The run-time link-loader does this job.

The run-time link-loader also searches an ordered list of directories,  
this time looking for the shared libraries.  However this list is NOT  
affected by the "-L" option you used when compiling.

Instead the LD_LIBRARY_PATH (and, I think, the LD_RUN_PATH)  
environment variable influences this list.  However it is easy to end  
up with an inappropriate ordering, and so use the wrong shared library  
when running your program.

Using the "-R dirname" option at compile time "hardcodes" the named  
directory into your executable.  When it is run this directory is also  
searched for searched libraries, without the need to fiddle on setting  
environment variables up.

Typically you would list the same directories for both -L and -R  
options when you are using "unusual" places.  Eg,

   cc -o executable prog.c -lsomelib -L /usr/local/BerkeleyDB/lib -R / 
usr/local/BerkeleyDB/lib

(All on one line, of course; the mailer will probably wrap the above.)

It works for us...  :-)

Cheers,
Mike B-)

-- 
The Computing Service, University of York, Heslington, York Yo10 5DD, UK
Tel:+44-1904-433811  FAX:+44-1904-433740

* Unsolicited commercial e-mail is NOT welcome at this e-mail address. *



More information about the dovecot mailing list