dlopen-ing a library with OpenMP by a non-OpenMP process

Mikhail Teterin mi+mill at aldan.algebra.com
Wed Nov 12 10:37:30 PST 2008


Hello!

Currently, when a program built without OpenMP (-fopenmp) is trying to 
dlopen a library, built with the feature, the result is a crash from 
"bad system call":

    #0  0x00000008009a223c in ksem_init () from /lib/libc.so.7
    #1  0x0000000800998a8f in sem_init () from /lib/libc.so.7
    #2  0x00000008011a6537 in omp_get_nested () from /usr/lib/libgomp.so.1
    #3  0x00000008011a3466 in ?? () from /usr/lib/libgomp.so.1
    #4  0x0000000000000002 in ?? ()
    #5  0x00000008005072b2 in dlsym () from /libexec/ld-elf.so.1
    #6  0x0000000800507cd2 in dlopen () from /libexec/ld-elf.so.1
    ...

Can anything be done about this -- disable the OpenMP functionality, but 
keep the library usable (single-threaded)? The problem arises, in 
particular, when one is trying to use libraries built by either 
GraphicsMagick or ImageMagick ports. Both have an OpenMP option, which 
speeds up some internal algorithms. The option is off by default, but 
enabling it makes sense on an SMP system... Yet, this makes the library 
unsuitable for other purposes... Thanks! Yours,

    -mi

P.S. I'm seeing the crash on a recent FreeBSD-7.1/amd64, but it, likely, 
can be seen elsewhere.


More information about the freebsd-stable mailing list