When using USE_SYSTEM_CSL=1
, even if libquadmath
is symlinked to the private lib/julia
directory, the library is resolved to a system path:
julia> using Libdl
julia> foreach(println, Libdl.dllist())
linux-vdso.so.1
/lib/x86_64-linux-gnu/libc.so.6
$PREFIX/bin/../lib/libjulia.so.1
/lib64/ld-linux-x86-64.so.2
$PREFIX/bin/../lib/julia/libjulia-internal.so.1
$PREFIX/bin/../lib/julia/libunwind.so.8
$PREFIX/bin/../lib/julia/libatomic.so.1
$PREFIX/bin/../lib/julia/libstdc++.so.6
$PREFIX/bin/../lib/julia/libm.so.6
$PREFIX/bin/../lib/julia/libgcc_s.so.1
$PREFIX/bin/../lib/julia/libjulia-codegen.so.1
$PREFIX/bin/../lib/julia/libLLVM-14jl.so
$PREFIX/lib/julia/sys.so
$PREFIX/bin/../lib/julia/libpcre2-8.so
$PREFIX/bin/../lib/julia/libgmp.so
$PREFIX/bin/../lib/julia/libmpfr.so
$PREFIX/bin/../lib/julia/libgfortran.so.5
/lib/x86_64-linux-gnu/libquadmath.so.0 # <===== system path here
$PREFIX/bin/../lib/julia/libgomp.so.1
$PREFIX/bin/../lib/julia/libopenblas64_.so
$PREFIX/bin/../lib/julia/libblastrampoline.so
$PREFIX/bin/../lib/julia/libcholmod.so
$PREFIX/bin/../lib/julia/libamd.so.2
$PREFIX/bin/../lib/julia/libcolamd.so.2
$PREFIX/bin/../lib/julia/libsuitesparseconfig.so.5
$PREFIX/bin/../lib/julia/libccolamd.so.2
$PREFIX/bin/../lib/julia/libcamd.so.2
$PREFIX/bin/../lib/julia/libnghttp2.so.14
$PREFIX/bin/../lib/julia/libcurl.so
$PREFIX/bin/../lib/julia/libssh2.so.1
$PREFIX/bin/../lib/julia/libmbedtls.so.14
$PREFIX/bin/../lib/julia/libmbedx509.so.1
$PREFIX/bin/../lib/julia/libmbedcrypto.so.7
$PREFIX/bin/../lib/julia/libz.so.1
libquadmath
is a dependency of libgfortran
.
I don't know if this is relevant (I'm not very familiar with julia loading mechanism, does it use DT_RPATH
or DT_RUNPATH
?), but on my system (linux
):
$ patchelf --print-rpath [USE_SYSTEM_CSL=1_build]/bin/../lib/julia/libgfortran.so.5
$ patchelf --print-rpath [official_julia_release]/bin/../lib/julia/libgfortran.so.5
$ORIGIN
Should libquadmath
be explicitly loaded before libgfortran
in CompilerSupportLibraries_jll ?
Yes, I believe @t-bltg's diagnosis is correct; libquadmath
should be loaded before libgfortran
. The annoying part is, not all platforms have a libquadmath
, so we have to either ignore failures or only open it on platforms that contain it.