* Tom Callaway:

> One of my packages failed the mass rebuild, but only on ppc64le and
> aarch64. The error they both hit is this:
>
> Error: package or namespace load failed for 'BiocParallel' in
> dyn.load(file, DLLpath = DLLpath, ...):
>  unable to load shared object
> '/builddir/build/BUILDROOT/R-BiocParallel-1.16.5-1.fc30.ppc64le/usr/lib64/R/library/BiocParallel/libs/BiocParallel.so':
>
> /builddir/build/BUILDROOT/R-BiocParallel-1.16.5-1.fc30.ppc64le/usr/lib64/R/library/BiocParallel/libs/BiocParallel.so:
> undefined symbol: shm_open
> Error: loading failed

Is this an error message from the R interpreter?

On x86-64, the R interpreter already loads librt:

7f0f2635a000-7f0f2635c000 r--p 00000000 fd:01 402963247                  
/usr/lib64/librt-2.29.so
7f0f2635c000-7f0f26360000 r-xp 00002000 fd:01 402963247                  
/usr/lib64/librt-2.29.so
7f0f26360000-7f0f26362000 r--p 00006000 fd:01 402963247                  
/usr/lib64/librt-2.29.so
7f0f26362000-7f0f26363000 r--p 00007000 fd:01 402963247                  
/usr/lib64/librt-2.29.so
7f0f26363000-7f0f26364000 rw-p 00008000 fd:01 402963247                  
/usr/lib64/librt-2.29.so

That's because libR loads it:

$ readelf -d /usr/lib64/R/lib/libR.so
…
 0x0000000000000001 (NEEDED)             Shared library: [librt.so.1]
…

The way dynamic linking works is that it searches for symbols in the
caller's namespace, and not just what's referenced by DT_NEEDED.

> Here's the linker invocation:
>
> g++ -m64 -std=gnu++11 -shared -L/usr/lib64/R/lib -Wl,-z,relro
> -Wl,--as-needed -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld
> -o BiocParallel.so ipcmutex.o -L/usr/lib64/R/lib -lR
>
> Now, google says this might be due to a lack of -lrt, but what's not
> clear to me is why it only fails on these two architectures (I've
> confirmed that none of the others have -lrt either).

In general, underlinking can be very problematic because it causes the
base symbol version to be used at run time, even if your program
actually requires a newer symbol version (for example, due to the
headers used at build time).  Here it does not matter (today) because we
only have one symbol version for shm_open.  But you do get interesting
effects with timer_create.

Thanks,
Florian
_______________________________________________
devel mailing list -- devel@lists.fedoraproject.org
To unsubscribe send an email to devel-le...@lists.fedoraproject.org
Fedora Code of Conduct: https://getfedora.org/code-of-conduct.html
List Guidelines: https://fedoraproject.org/wiki/Mailing_list_guidelines
List Archives: 
https://lists.fedoraproject.org/archives/list/devel@lists.fedoraproject.org

Reply via email to