JuliaPackaging/BinaryBuilderBase.jl

`CompilerSupportLibraries_jll` v0.5.0 from GCC 11 breaks some platforms

Closed this issue · 1 comments

% julia -e 'using BinaryBuilderBase; BinaryBuilderBase.runshell(Platform("i686", "linux"))'
sandbox:${WORKSPACE} # mkdir -p ${prefix}
sandbox:${WORKSPACE} # wget -qO - 'https://github.com/JuliaBinaryWrappers/CompilerSupportLibraries_jll.jl/releases/download/CompilerSupportLibraries-v0.5.0%2B0/CompilerSupportLibraries.v0.5.0.i686-linux-gnu-libgfortran3.tar.gz' | tar xzf - -C ${prefix}
sandbox:${WORKSPACE} # echo 'int main() { return 0; }' | g++ -x c++ - -Wl,--trace -o sanitycheckcpp.exe -L${libdir}
/opt/i686-linux-gnu/bin/../lib/gcc/i686-linux-gnu/4.8.5/../../../../i686-linux-gnu/bin/ld: mode elf_i386
/opt/i686-linux-gnu/bin/../i686-linux-gnu/sys-root/usr/lib/crt1.o
/opt/i686-linux-gnu/bin/../i686-linux-gnu/sys-root/usr/lib/crti.o
/opt/i686-linux-gnu/bin/../lib/gcc/i686-linux-gnu/4.8.5/crtbegin.o
/tmp/ccnJKpAc.o
-lstdc++ (/workspace/destdir/lib/libstdc++.so)
-lm (/opt/i686-linux-gnu/bin/../i686-linux-gnu/sys-root/usr/lib/libm.so)
-lgcc_s (/opt/i686-linux-gnu/bin/../lib/gcc/i686-linux-gnu/4.8.5/../../../../i686-linux-gnu/lib/libgcc_s.so)
/lib/libc.so.6 (/opt/i686-linux-gnu/bin/../i686-linux-gnu/sys-root/lib/libc.so.6)
(/opt/i686-linux-gnu/bin/../i686-linux-gnu/sys-root/usr/lib/libc_nonshared.a)elf-init.oS
/lib/ld-linux.so.2 (/opt/i686-linux-gnu/bin/../i686-linux-gnu/sys-root/lib/ld-linux.so.2)
-lgcc_s (/opt/i686-linux-gnu/bin/../lib/gcc/i686-linux-gnu/4.8.5/../../../../i686-linux-gnu/lib/libgcc_s.so)
/opt/i686-linux-gnu/bin/../lib/gcc/i686-linux-gnu/4.8.5/crtend.o
/opt/i686-linux-gnu/bin/../i686-linux-gnu/sys-root/usr/lib/crtn.o
/workspace/destdir/lib/libstdc++.so: undefined reference to `__divmoddi4@GCC_7.0.0'
/opt/i686-linux-gnu/bin/../lib/gcc/i686-linux-gnu/4.8.5/../../../../i686-linux-gnu/bin/ld: link errors found, deleting executable `sanitycheckcpp.exe'
collect2: error: ld returned 1 exit status
sandbox:${WORKSPACE} # echo 'int main() { return 0; }' | g++ -x c++ - -Wl,--trace -o sanitycheckcpp.exe
/opt/i686-linux-gnu/bin/../lib/gcc/i686-linux-gnu/4.8.5/../../../../i686-linux-gnu/bin/ld: mode elf_i386
/opt/i686-linux-gnu/bin/../i686-linux-gnu/sys-root/usr/lib/crt1.o
/opt/i686-linux-gnu/bin/../i686-linux-gnu/sys-root/usr/lib/crti.o
/opt/i686-linux-gnu/bin/../lib/gcc/i686-linux-gnu/4.8.5/crtbegin.o
/tmp/ccMjMAnj.o
-lstdc++ (/opt/i686-linux-gnu/bin/../lib/gcc/i686-linux-gnu/4.8.5/../../../../i686-linux-gnu/lib/libstdc++.so)
-lm (/opt/i686-linux-gnu/bin/../i686-linux-gnu/sys-root/usr/lib/libm.so)
-lgcc_s (/opt/i686-linux-gnu/bin/../lib/gcc/i686-linux-gnu/4.8.5/../../../../i686-linux-gnu/lib/libgcc_s.so)
/lib/libc.so.6 (/opt/i686-linux-gnu/bin/../i686-linux-gnu/sys-root/lib/libc.so.6)
(/opt/i686-linux-gnu/bin/../i686-linux-gnu/sys-root/usr/lib/libc_nonshared.a)elf-init.oS
/lib/ld-linux.so.2 (/opt/i686-linux-gnu/bin/../i686-linux-gnu/sys-root/lib/ld-linux.so.2)
-lgcc_s (/opt/i686-linux-gnu/bin/../lib/gcc/i686-linux-gnu/4.8.5/../../../../i686-linux-gnu/lib/libgcc_s.so)
/opt/i686-linux-gnu/bin/../lib/gcc/i686-linux-gnu/4.8.5/crtend.o
/opt/i686-linux-gnu/bin/../i686-linux-gnu/sys-root/usr/lib/crtn.o
sandbox:${WORKSPACE} # ./sanitycheckcpp.exe 
sandbox:${WORKSPACE} # nm ${libdir}/libstdc++.so | grep divmoddi4
         U __divmoddi4@GCC_7.0.0

So, when using CompilerSupportLibraries_jll v0.5.0 from GCC 11 and ${libdir} is in the linker search path of libraries g++ can't compile the simple program because ${libdir}/libstdc++.so has an undefined symbol __divmoddi4@GCC_7.0.0. We don't have any issues if ${libdir} isn't in the linker search path and /opt/${target}/${target}/lib/libstdc++.so is picked up

As far as I understand, the issue is that the undefined symbol __divmoddi4@GCC_7.0.0 found in libstdc++.so should come from libgcc_so.1, but in the CompilerSupportLibraries_jll recipe libgcc_s.so.1 comes from the second iteration, constrained by libgfortran version, so that in the i686-linux-*-libgfortran3 tarballs libstdc++.so has this symbol undefined, but the necessary libgcc_s.so.1 isn't there.