Description
When attempting to create plots using the python3 simobs utilities, the following error shows up (Hercules example using spack-stack-1.9.2):
>>> from simobs.plotting.skylab_monitor import main as skylab_monitor
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/work2/noaa/jcsda/herbener/jedi-herc/jedi-workflow/simobs/src/simobs/plotting/skylab_monitor.py", line 16, in <module>
from simobs.plotting.plot_maps import \
File "/work2/noaa/jcsda/herbener/jedi-herc/jedi-workflow/simobs/src/simobs/plotting/plot_maps.py", line 9, in <module>
import scipy.stats as st
File "/apps/contrib/spack-stack/spack-stack-1.9.2/envs/ue-oneapi-2024.1.0/install/gcc/13.3.0/py-scipy-1.14.1-xhcqbl7/lib/python3.11/site-packages/scipy/stats/__init__.py", line 610, in <module>
from ._stats_py import *
File "/apps/contrib/spack-stack/spack-stack-1.9.2/envs/ue-oneapi-2024.1.0/install/gcc/13.3.0/py-scipy-1.14.1-xhcqbl7/lib/python3.11/site-packages/scipy/stats/_stats_py.py", line 38, in <module>
from scipy.spatial import distance_matrix
File "/apps/contrib/spack-stack/spack-stack-1.9.2/envs/ue-oneapi-2024.1.0/install/gcc/13.3.0/py-scipy-1.14.1-xhcqbl7/lib/python3.11/site-packages/scipy/spatial/__init__.py", line 110, in <module>
from ._kdtree import *
File "/apps/contrib/spack-stack/spack-stack-1.9.2/envs/ue-oneapi-2024.1.0/install/gcc/13.3.0/py-scipy-1.14.1-xhcqbl7/lib/python3.11/site-packages/scipy/spatial/_kdtree.py", line 4, in <module>
from ._ckdtree import cKDTree, cKDTreeNode
ImportError: /usr/lib64/libstdc++.so.6: version `GLIBCXX_3.4.32' not found (required by /apps/contrib/spack-stack/spack-stack-1.9.2/envs/ue-oneapi-2024.1.0/install/gcc/13.3.0/py-scipy-1.14.1-xhcqbl7/lib/python3.11/site-packages/scipy/spatial/_ckdtree.cpython-311-x86_64-linux-gnu.so)
>>>
The the stdc++ library (libstdc++.so.6) is being loaded during runtime. However the compiled python library in scipy (/apps/contrib/spack-stack/spack-stack-1.9.2/envs/ue-oneapi-2024.1.0/install/gcc/13.3.0/py-scipy-1.14.1-xhcqbl7/lib/python3.11/site-packages/scipy/spatial/_ckdtree.cpython-311-x86_64-linux-gnu.so) was linked with a stdc++ library from a different location as revealed by the ldd command. Here's the output of running ldd on the scipy compiled library:
ldd /apps/contrib/spack-stack/spack-stack-1.9.2/envs/ue-oneapi-2024.1.0/install/gcc/13.3.0/py-scipy-1.14.1-xhcqbl7/lib/python3.11/site-packages/scipy/spatial/_ckdtree.cpython-311-x86_64-linux-gnu.so
linux-vdso.so.1 (0x00007ffdb334d000)
libstdc++.so.6 => /apps/contrib/spack-stack/spack-stack-1.9.2/envs/ue-oneapi-2024.1.0/install/gcc/13.3.0/gcc-runtime-13.3.0-rmyeldf/lib/libstdc++.so.6 (0x00007fedfe603000)
libm.so.6 => /usr/lib64/libm.so.6 (0x00007fedfe528000)
libgcc_s.so.1 => /apps/contrib/spack-stack/spack-stack-1.9.2/envs/ue-oneapi-2024.1.0/install/gcc/13.3.0/gcc-runtime-13.3.0-rmyeldf/lib/libgcc_s.so.1 (0x00007fedfe500000)
libc.so.6 => /usr/lib64/libc.so.6 (0x00007fedfe2f7000)
/lib64/ld-linux-x86-64.so.2 (0x00007fedfe94c000)
where you can see that /apps/contrib/spack-stack/spack-stack-1.9.2/envs/ue-oneapi-2024.1.0/install/gcc/13.3.0/gcc-runtime-13.3.0-rmyeldf/lib/libstdc++.so.6 was linked at build time, whereas /usr/lib64/libstdc++.so.6 was loaded at runtime.
This is happening because LD_LIBRARY_PATH is not being setup correctly. The desired path (/apps/contrib/spack-stack/spack-stack-1.9.2/envs/ue-oneapi-2024.1.0/install/gcc/13.3.0/gcc-runtime-13.3.0-rmyeldf/lib) is not included but /usr/lib64 is included.
It looks like oneapi provides a standard C++ library that needs to be used instead of the system provided library. Placing the desired path in LD_LIBRARY_PATH before /usr/lib64 provides a workaround, and perhaps this is the way to address this.
The same situation is ocurring on Orion, spack-stack-1.9.3 with the desired path /apps/contrib/spack-stack/spack-stack-1.9.3/envs/ue-oneapi-2024.2.1/install/gcc/12.2.0/gcc-runtime-12.2.0-bilscpd/lib not being included in LD_LIBRARY_PATH.
To Reproduce
- set up the environment
module purge
module use /work/noaa/epic/role-epic/spack-stack/hercules/modulefiles
module load ecflow/5.8.4
module load git-lfs/3.1.2
module use /apps/contrib/spack-stack/spack-stack-1.9.2/envs/ue-oneapi-2024.1.0/install/modulefiles/Core
module use /apps/contrib/spack-stack/spack-stack-1.9.2/envs/ue-oneapi-2024.1.0/install/modulefiles/gcc/13.3.0
module load stack-oneapi/2024.2.1
module load stack-intel-oneapi-mpi/2021.13
module load stack-python/3.11.7
module load jedi-fv3-env
SPACK_STACK_INTEL_ENV=/apps/contrib/spack-stack/spack-stack-1.9.3/envs/ue-oneapi-2024.2.1
# load modules
module purge
module use $SPACK_STACK_INTEL_ENV/install/modulefiles/Core
module load stack-oneapi/2024.2.1
module load stack-intel-oneapi-mpi/2021.13
module load stack-python/3.11.7
module load singularity
# This is a fix for the issue where a handful of spack-stack-1.9.1
# oneapi modules (eg, py-scipy) were not being found because
# these modules were being built with the gcc compilers instead
# of the oneapi compilers.
export LMOD_TMOD_FIND_FIRST=yes
module use $SPACK_STACK_INTEL_ENV/install/modulefiles/gcc/12.2.0
module load jedi-fv3-env
- run python3 and try importing the following
linux_prompt> python3
>>> import pandas
>>> import scipy.stats as st
Expected behavior
The example import (above) successfully completes
System, compiler, code, ...
- using the JEDI skylab environment (at the least source the setup script and run build_workflow_apps.sh from jedi-tools)
- intel oneapi 2024.1.0 for both orion and hercules
Additional context
I suspect that there is a process we are missing in our JEDI skylab setup scripts that gets LD_LIBRARY_PATH set correctly, so the solution might simply be to add this process to the JEDI skylab scripts.
Description
When attempting to create plots using the python3 simobs utilities, the following error shows up (Hercules example using spack-stack-1.9.2):
The the stdc++ library (libstdc++.so.6) is being loaded during runtime. However the compiled python library in scipy (/apps/contrib/spack-stack/spack-stack-1.9.2/envs/ue-oneapi-2024.1.0/install/gcc/13.3.0/py-scipy-1.14.1-xhcqbl7/lib/python3.11/site-packages/scipy/spatial/_ckdtree.cpython-311-x86_64-linux-gnu.so) was linked with a stdc++ library from a different location as revealed by the
lddcommand. Here's the output of runninglddon the scipy compiled library:where you can see that
/apps/contrib/spack-stack/spack-stack-1.9.2/envs/ue-oneapi-2024.1.0/install/gcc/13.3.0/gcc-runtime-13.3.0-rmyeldf/lib/libstdc++.so.6was linked at build time, whereas/usr/lib64/libstdc++.so.6was loaded at runtime.This is happening because LD_LIBRARY_PATH is not being setup correctly. The desired path (
/apps/contrib/spack-stack/spack-stack-1.9.2/envs/ue-oneapi-2024.1.0/install/gcc/13.3.0/gcc-runtime-13.3.0-rmyeldf/lib) is not included but/usr/lib64is included.It looks like oneapi provides a standard C++ library that needs to be used instead of the system provided library. Placing the desired path in LD_LIBRARY_PATH before
/usr/lib64provides a workaround, and perhaps this is the way to address this.The same situation is ocurring on Orion, spack-stack-1.9.3 with the desired path
/apps/contrib/spack-stack/spack-stack-1.9.3/envs/ue-oneapi-2024.2.1/install/gcc/12.2.0/gcc-runtime-12.2.0-bilscpd/libnot being included in LD_LIBRARY_PATH.To Reproduce
Expected behavior
The example import (above) successfully completes
System, compiler, code, ...
Additional context
I suspect that there is a process we are missing in our JEDI skylab setup scripts that gets LD_LIBRARY_PATH set correctly, so the solution might simply be to add this process to the JEDI skylab scripts.