On Thu, Mar 18, 2010 at 12:59 PM, Mark Bucciarelli <mkb...@gmail.com> wrote:
>
> How do I get the symbolic links generated
> from .so.<version> to .so?
>

What I've learned:

  * If my test code is right (see below), dlopen("libbat.so")
    and dlopen("/usr/local/lib/libbat.so.1.34") do the
    same thing on OpenBSD.

  * library_names_spec determines what symbolic links
    libtool makes, and OpenBSD and Linux have different
    values for this variable.

   * a similar topic came up on this list five years ago [1]

So, it seems to me the correct approach is to patch
monetdb to skip the call to open() and let dlopen()
do it's thing.

Does this make sense?  (Dynamic loading is new
to me.)

I'll ping upstream to ask why they call open() before
calling dlopen().  I can't think of what value it adds.

Thanks,

m

[1] http://www.mail-archive.com/ports@openbsd.org/msg02600.html

#include <dlfcn.h>
#include <stdio.h>

int
main(void)
{
        void    *handle;
        char    *fns[] = {
                        "libbat.so",
                        "/usr/local/lib/libbat.so.1.34",
                        "libbat.so.1.34",
                        "libbat.so.1",
                        0
                };
        char    **fn;

        for (fn = fns; *fn; fn++) {
                fprintf(stderr, "handle = %p for %s\n", dlopen(*fn,
RTLD_NOW), *fn);
                dlclose(handle);
        }
        return 0;
}

Reply via email to