shared static this not invoked on almalinux 8.5, all is well on fedora 35

ichneumwn idonotenjoyemail at idonotenjoyemail.org
Thu Jun 9 08:54:51 UTC 2022


Dear forum,

I am using ldc,
version   1.28.0-git-5a28329 (DMD v2.098.0, LLVM 10.0.0)
on two different systems:
1. Almalinux 8.5
2. Fedora 35

ldc itself was compiled on the Almalinux system and then copied 
over to the Fedora 35 system

I confirmed it is the same ldc executable on both systems by 
running

     md5sum `which ldc2`

I have a simple test case where it seems on the Almalinux system, 
shared static this() code does not get invoked.

Output on Almalinux:

         dsostub : crt_constructor

Output on Fedora:

         dsostub : crt_constructor
         md_static_import : shared static this
         main : shared static this

The code is built using meson, and using meson compile --verbose 
I can see that the compilation steps are the same, and the 
linking step looks like this and is identical on both systems:

         /usr/bin/cc mwe.p/dsostub.d.o mwe.p/md_static_import.d.o 
mwe.p/main.d.o -o mwe -Xlinker --allow-shlib-undefined 
-L/opt/ldc2-1.28.0/lib -lphobos2-ldc-shared -ldruntime-ldc-shared 
-Wl,-rpath,/opt/ldc2-1.28.0/lib -Wl,--gc-sections -lrt -ldl 
-lpthread -lm -m64

If I copy over the build directory from the almalinux system to 
the fedora system and re-execute the link command as above, the 
resulting executable *does* work.

1. /usr/bin/cc --version on almalinux : cc (GCC) 8.5.0 20210514 
(Red Hat 8.5.0-4)
2. /usr/bin/cc --version on fedora : cc (GCC) 11.2.1 20220127 
(Red Hat 11.2.1-9)

So it seems there is a difference in how gcc 8.5.0 and gcc 11.2.1 
handle something in the linking process, but I assume it requires 
knowledge of ldc to know what that might be, which is why I am 
posting here.

The code can be gotten from here: 
[github](https://github.com/ichneumwn/mwe_shared_static_this). It 
was originally also using using static and dynamic libraries 
which is why I have the dsostub code that uses 
pragma(crt_constructor) which is not actually relevant here.

I am hoping there might be a linker option that I can pass to the 
older gcc that would resolve the issue?



More information about the digitalmars-d-ldc mailing list