Dear colleges, I am trying to compile I/O API 3.2 with intel compiler v2023.2.1 (CC=icc), netcdf 4.7.4 classic, with nocpl, and I am facing the following error:
cd /opt/ohpc/pub/apps/libs/ioapi/ioapi-3.2/Linux2_x86_64ifort; ar rsv libioapi.a m3utilio.o modgctp.o modwrfio.o modmpasfio.o modatts3.o modncfio.o modpdata.o
a - m3utilio.o
a - modgctp.o
a - modwrfio.o
a - modmpasfio.o
a - modatts3.o
a - modncfio.o
a - modpdata.o
ar: Relink `/opt/intel/oneapi/compiler/2023.2.1/linux/compiler/lib/intel64_lin/libimf.so' with `/lib64/libm.so.6' for IFUNC symbol `sincosf'
/bin/sh: line 1: 40671 Segmentation fault (core dumped) ar rsv libioapi.a m3utilio.o modgctp.o modwrfio.o modmpasfio.o modatts3.o modncfio.o modpdata.o
make[1]: *** [Makefile:283: mlib] Error 139
make[1]: Leaving directory '/opt/ohpc/pub/apps/libs/ioapi/ioapi-3.2/ioapi'
make: *** [Makefile:204: all] Error 2
I haven’t seen this one before, so much of this is guess-work:
There looks to be a conflict between the Intel libimf.so math library and the system libm.so math library.
First of all, since all your builds use -Bstatic -static-intel, these shared-object (.so) libraries shouldn’t be used at all – are the relevant static (.a) libraries missing on your system (and if soi, where are they)?
Then /lib64 is not the usual place for the libraries – I would expect them to be in /usr/lib64 instead – is this the cause of the problem?
Assuming /opt/intel/oneapi/compiler/2023.2.1/linux/compiler/lib/intel64_lin/libimf.a exists what happens if you add -L/opt/intel/oneapi/compiler/2023.2.1/linux/compiler/lib/intel64_lin right after the -Bstatic -static-intel ? (This might force the use of the (expected) Intel math library and exclude that un-wanted system math library.)
The issue was in the environmental variables.
The modulefile was not setting it correctly, so I got this error.
I had to source the setvars.sh from intel oneAPI to get it done.
Aha – a compiler installation/configure error: I’ll have to remember that.
Sourcing the setvars.sh should have been set up either as part of the installation process (the sysadmin should have done this from /etc/profile.d) or as part of the module load command (on systems that use that for configuring software.
That is right. I had the module load the intel compilers, but it looks like some variables were not loaded.
I am trying to source the setvars.sh inside the module file, but I am facing some issues.
I tried the command souce_sh "bash", "path/to/setvars.sh" or souce_sh bash path/to/setvars.sh but I always get an error saying the syntax is wrong.
Do you have some advice on how to do it?