shooting oneself in the foot with "ldconfig -v"

Erik Trulsson ertr1013 at
Wed Oct 10 22:26:42 PDT 2007

On Thu, Oct 11, 2007 at 12:27:49AM -0400, Jonathan Noack wrote:
> On Wed, October 10, 2007 18:34, Erik Trulsson wrote:
> > On Wed, Oct 10, 2007 at 05:41:29PM -0400, Jonathan Noack wrote:
> >> Hey folks,
> >> I'm running 6.2-p8 and was trying to clean up my "portsclean -L" output
> >> today.  It was reporting tons of duplicate libraries in /usr/X11R6 and
> >> /usr/local even though X11R6 is an alias to /usr/local.  I tracked the
> >> problem to portclean's use of `ldconfig -elf -r` which was reporting
> >> directories and libraries in /usr/X11R6.  I read the ldconfig manpage in
> >> an attempt to understand more and saw this line:
> >>      -v      Switch on verbose mode.
> >>
> >> I told myself, "Self, the '-v' option may allow you to determine what's
> >> going on.  It can't help knowing more!"  Alas, the "-v" option doesn't
> >> behave as advertised.  Instead it clears the shared library cache
> >> (reference:  An empty shared library
> >> cache means all dynamically-linked programs fail.  This has the
> >> wonderful
> >> side-effect of preventing me from logging into the box to fix it (I
> >> logged
> >> off before I figured this out).  "Reboot and all will be well," you say?
> >> Yes, on boot /etc/rc.d/ldconfig is run and it builds the shared library
> >> cache.  Unfortunately, the box is 1,000 miles away in my apartment.  :(
> >>
> >> This brings me to the question:
> >> Is the "-v" option broken or is the documentation out of date?
> >
> > No, the '-v' option behaves as documented and is not broken.
> > It is, however, intended to be used in conjunction with some other option.
> >
> > You see, running ldconfig(8) without any arguments at all will clear the
> > shared library cache.  (Actually it will replace the cache with the files
> > found in the specified directories, but since none were specified...)
> > Adding '-v' will not change what ldconfig does, except possibly letting
> > it be a bit more verbose about what happens.
> Not according to ldconfig(8); running ldconfig without any arguments
> implies "-R":
> -R      Rescan the previously configured directories.  This opens the
>         previous hints file and fetches the directory list from the
>         header.  Any additional pathnames on the command line are also
>         processed.  This is the default action when no parameters are
>         given.

Yes, you are right.

> The previously configured directory list was fully populated, so
> effectively there should have been no change as the previously configured
> directories were untouched and I specified no additional pathnames.
> > ldconfig is behaving as designed and documented, so the bug, such as it
> > is,
> > is in the design of ldconfig that lets you screw up the machine by simply
> > running ldconfig without any option.
> Are you saying that by specifying "-v" I no longer satisfied the "no
> parameters are given" clause and ended up in a default place in the logic?

That wasn't actually what I was saying, but after checking the source code it turns
out you are right and that is exactly what happens.

>  I could see how an unconditional shared library cache clear coupled with
> no additional action (no matching actions to pursue) could get me the
> results I got.  If so that behavior is really confusing.  IMHO a verbose
> switch shouldn't change behavior; it should just spam the console a lot.


<Insert your favourite quote here.>
Erik Trulsson
ertr1013 at

More information about the freebsd-questions mailing list