You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Is your feature request related to a problem? Please describe.
Applications built with spack-stack packages esmf, parallelio, parallel-netcdf have libirc.so dynamically linked. Applications linked against libirc.so fail to start up with an error like this:
Relink `/path/to/libirc.so' with `/lib/x86_64-linux-gnu/libc.so.6' for IFUNC symbol `memmove'
The error comes from the fact that libirc.so claims to by statically linked, even though it is not, and is missing the symbols from libc. According to Intel, libirc.so is deprecated and distributed for legacy reasons only; if necessary, one should link to libintlc.so instead. However, even the last-ever release of ifort in oneAPI 2024.2.1 still links against libirc (albeit libirc.a):
$ ifort --version
ifort: remark #10448: Intel(R) Fortran Compiler Classic (ifort) is now deprecated and will be discontinued late 2024. Intel recommends that customers transition now to using the LLVM-based Intel(R) Fortran Compiler (ifx) for continued Windows* and Linux* support, new language support, new language features, and optimizations. Use '-diag-disable=10448' to disable this message.
ifort (IFORT) 2021.13.0 20240602
Copyright (C) 1985-2024 Intel Corporation. All rights reserved.
$ mpiifort --version
ifort: remark #10448: Intel(R) Fortran Compiler Classic (ifort) is now deprecated and will be discontinued late 2024. Intel recommends that customers transition now to using the LLVM-based Intel(R) Fortran Compiler (ifx) for continued Windows* and Linux* support, new language support, new language features, and optimizations. Use '-diag-disable=10448' to disable this message.
ifort (IFORT) 2021.13.0 20240602
Copyright (C) 1985-2024 Intel Corporation. All rights reserved.
$ which ifort
/opt/intel/oneapi/compiler/2024.2/bin/ifort
$ cat conftest.f
program main
end
$ /opt/intel/oneapi/mpi/2021.10.0/bin/mpiifort -o conftest -fPIC -v conftest.f
mpiifort for the Intel(R) MPI Library 2021.10 for Linux*
Copyright Intel Corporation.
ifort: remark #10448: Intel(R) Fortran Compiler Classic (ifort) is now deprecated and will be discontinued late 2024. Intel recommends that customers transition now to using the LLVM-based Intel(R) Fortran Compiler (ifx) for continued Windows* and Linux* support, new language support, new language features, and optimizations. Use '-diag-disable=10448' to disable this message.
ifort version 2021.13.0
/opt/intel/oneapi/compiler/2024.2/bin/../bin/fortcom -D__INTEL_COMPILER=2021 -D__INTEL_COMPILER_UPDATE=0 -D__unix__ -D__unix -D__linux__ -D__linux -D__gnu_linux__ -Dunix -Dlinux -D__ELF__ -D__x86_64 -D__x86_64__ -D__amd64 -D__amd64__ -D__INTEL_COMPILER_BUILD_DATE=20240602 -D__PIC__ -D__pic__ -D__INTEL_OFFLOAD -D__MMX__ -D__SSE__ -D__SSE_MATH__ -D__SSE2__ -D__SSE2_MATH__ -D__pentium4 -D__pentium4__ -D__tune_pentium4__ -I. -I/opt/intel/oneapi/mpi/2021.13//include -I/opt/intel/oneapi/mpi/2021.13/include -I/opt/intel/oneapi/tbb/2021.13/env/../include -I/opt/intel/oneapi/mpi/2021.13/include -I/opt/intel/oneapi/mkl/2024.2/include -I/opt/intel/oneapi/ippcp/2021.12/include -I/opt/intel/oneapi/ipp/2021.12/include -I/opt/intel/oneapi/dpl/2022.6/include -I/opt/intel/oneapi/dpcpp-ct/2024.2/include -I/opt/intel/oneapi/dnnl/2024.2/include -I/opt/intel/oneapi/dev-utilities/2024.2/include -I/opt/intel/oneapi/dal/2024.5/include/dal -I/opt/intel/oneapi/ccl/2021.13/include -I/opt/intel/oneapi/compiler/2024.2/bin/../opt/compiler/include/intel64 -I/opt/intel/oneapi/compiler/2024.2/bin/../opt/compiler/include/icc -I/opt/intel/oneapi/compiler/2024.2/bin/../opt/compiler/include -I/opt/intel/oneapi/compiler/2024.2/bin/../include -I/usr/local/include -I/usr/lib/gcc/x86_64-linux-gnu/11/include -I/usr/include/ -I/usr/include -I/usr/include/x86_64-linux-gnu -omp_simd -O2 "-reentrancy threaded" -simd -offload_host -mGLOB_em64t=TRUE -mP1OPT_version=2021.13.0-intel64 -mGLOB_diag_file=/tmp/ifortTgpc8e.diag -mGLOB_long_size_64 -mGLOB_routine_pointer_size_64 -mGLOB_source_language=GLOB_SOURCE_LANGUAGE_F90 -mP2OPT_static_promotion -mGLOB_pack_sort_init_list -mP1OPT_print_version=FALSE -mCG_use_gas_got_workaround=F -mP2OPT_align_option_used=TRUE -mGLOB_gcc_version=1140 "-mGLOB_options_string=-I/opt/intel/oneapi/mpi/2021.13//include -I/opt/intel/oneapi/mpi/2021.13/include -o conftest -fPIC -v " -mGLOB_position_independent_code -mGLOB_preemption_model=3 -mGLOB_cxx_limited_range=FALSE -mCG_extend_parms=FALSE -mGLOB_compiler_bin_directory=/opt/intel/oneapi/compiler/2024.2/bin/../bin -mGLOB_as_output_backup_file_name=/tmp/ifortkZvop2as_.s -mGLOB_dashboard_use_source_name -mIPOPT_activate -mIPOPT_lite -mGLOB_uarch_tuning=0x0 -mGLOB_product_id_code=0x22006d91 -mCG_bnl_movbe=T -mP3OPT_use_mspp_call_convention -mP2OPT_subs_out_of_bound=FALSE -mP2OPT_disam_type_based_disam=2 -mGLOB_ansi_alias -mPGOPTI_value_profile_use=T -mGLOB_opt_report_use_source_name -mGLOB_offload_mode=1 -mGLOB_offload_no_openmp=TRUE -mP2OPT_offload_unique_var_string=ifort07060132596QeG1J -mP2OPT_hlo_level=2 -mP2OPT_hlo -mP2OPT_hpo_rtt_control=0 -mIPOPT_args_in_regs=0 -mP2OPT_disam_assume_nonstd_intent_in=FALSE -mGLOB_imf_mapping_library=/opt/intel/oneapi/compiler/2024.2/bin/../bin/libiml_attr.so -mIPOPT_single_file_compile_and_link=TRUE -mPGOPTI_gen_threadsafe_level=0 -mIPOPT_lto_object_enabled -mIPOPT_lto_object_value=1 -mIPOPT_obj_output_file_name=/tmp/ifortTgpc8e.o -mIPOPT_whole_archive_fixup_file_name=/tmp/ifortwarchDFc3Dt -mGLOB_linker_version=2.38 -mGLOB_linker=ld -mGLOB_driver_tempfile_name=/tmp/iforttempfilekYM22M -mP3OPT_asm_target=P3OPT_ASM_TARGET_GAS -mGLOB_async_unwind_tables=TRUE -mGLOB_obj_output_file=/tmp/ifortTgpc8e.o -mGLOB_source_dialect=GLOB_SOURCE_DIALECT_FORTRAN -mP1OPT_source_file_name=conftest.f -mP1OPT_full_source_file_name=/home/ubuntu/spack-stack/manual-testing/spst-cylc-intel-issue/cache/build_stage/spack-stage-parallel-netcdf-1.12.3-bk323gudtfyytpk3najlthjezz4m5wnd/conftest.f -mP2OPT_symtab_type_copy=true conftest.f
#include "..." search starts here:
#include <...> search starts here:
.
/opt/intel/oneapi/mpi/2021.13//include
/opt/intel/oneapi/mpi/2021.13/include
/opt/intel/oneapi/tbb/2021.13/env/../include
/opt/intel/oneapi/mpi/2021.13/include
/opt/intel/oneapi/mkl/2024.2/include
/opt/intel/oneapi/ippcp/2021.12/include
/opt/intel/oneapi/ipp/2021.12/include
/opt/intel/oneapi/dpl/2022.6/include
/opt/intel/oneapi/dpcpp-ct/2024.2/include
/opt/intel/oneapi/dnnl/2024.2/include
/opt/intel/oneapi/dev-utilities/2024.2/include
/opt/intel/oneapi/dal/2024.5/include/dal
/opt/intel/oneapi/ccl/2021.13/include
/opt/intel/oneapi/compiler/2024.2/bin/../opt/compiler/include/intel64
/opt/intel/oneapi/compiler/2024.2/bin/../opt/compiler/include
/opt/intel/oneapi/compiler/2024.2/bin/../include
/usr/local/include
/usr/lib/gcc/x86_64-linux-gnu/11/include
/usr/include/
/usr/include
/usr/include/x86_64-linux-gnu
End of search list.
ld /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/Scrt1.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crti.o /usr/lib/gcc/x86_64-linux-gnu/11/crtbeginS.o --eh-frame-hdr --build-id -dynamic-linker /lib64/ld-linux-x86-64.so.2 -m elf_x86_64 -o conftest /opt/intel/oneapi/compiler/2024.2/bin/../lib/for_main.o -L/opt/intel/oneapi/tbb/2021.13/env/../lib/intel64/gcc4.8 -L/opt/intel/oneapi/mpi/2021.13/lib -L/opt/intel/oneapi/mkl/2024.2/lib/ -L/opt/intel/oneapi/ippcp/2021.12/lib/ -L/opt/intel/oneapi/ipp/2021.12/lib -L/opt/intel/oneapi/dpl/2022.6/lib -L/opt/intel/oneapi/dnnl/2024.2/lib -L/opt/intel/oneapi/dal/2024.5/lib -L/opt/intel/oneapi/compiler/2024.2/lib -L/opt/intel/oneapi/ccl/2021.13/lib/ -L/opt/intel/oneapi/compiler/2024.2/bin/../lib -L/opt/intel/oneapi/compiler/2024.2/bin/../opt/compiler/lib -L/opt/intel/oneapi/tbb/2021.13/env/../lib/intel64/gcc4.8/../lib/ -L/opt/intel/oneapi/mpi/2021.13/lib/../lib/ -L/opt/intel/oneapi/mkl/2024.2/lib/../lib/ -L/opt/intel/oneapi/ippcp/2021.12/lib/../lib/ -L/opt/intel/oneapi/ipp/2021.12/lib/../lib/ -L/opt/intel/oneapi/dpl/2022.6/lib/../lib/ -L/opt/intel/oneapi/dnnl/2024.2/lib/../lib/ -L/opt/intel/oneapi/dal/2024.5/lib/../lib/ -L/opt/intel/oneapi/compiler/2024.2/lib/../lib/ -L/opt/intel/oneapi/ccl/2021.13/lib/../lib/ -L/usr/lib/gcc/x86_64-linux-gnu/11/ -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/ -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib64 -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib/ -L/lib/x86_64-linux-gnu/ -L/lib/../lib64 -L/lib/../lib/ -L/usr/lib/x86_64-linux-gnu/ -L/usr/lib/../lib64 -L/usr/lib/../lib/ -L/opt/intel/oneapi/tbb/2021.13/env/../lib/intel64/gcc4.8/ -L/opt/intel/oneapi/mpi/2021.13/lib/ -L/opt/intel/oneapi/mkl/2024.2/lib/ -L/opt/intel/oneapi/ippcp/2021.12/lib/ -L/opt/intel/oneapi/ipp/2021.12/lib/ -L/opt/intel/oneapi/dpl/2022.6/lib/ -L/opt/intel/oneapi/dnnl/2024.2/lib/ -L/opt/intel/oneapi/dal/2024.5/lib/ -L/opt/intel/oneapi/compiler/2024.2/lib/ -L/opt/intel/oneapi/ccl/2021.13/lib/ -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../ -L/lib64 -L/lib/ -L/usr/lib64 -L/usr/lib /tmp/ifortTgpc8e.o -Bdynamic -Bstatic -lifport -lifcoremt_pic -limf -lsvml -Bdynamic -lm -Bstatic -lipgo -lirc -Bdynamic -lpthread -Bstatic -lsvml -Bdynamic -lc -lgcc -lgcc_s -Bstatic -lirc_s -Bdynamic -ldl -lc /usr/lib/gcc/x86_64-linux-gnu/11/crtendS.o /usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/crtn.o
This linking to libirc is coming straight from ifort, but in the above command it should be all static, and indeed it is:
However, this is the output from the parallel-netcdf ./configure script:
$ less spack-build-02-configure-out.txt
checking how to get verbose linking output from /opt/intel/oneapi/mpi/2021.10.0/bin/mpiifort... -v
checking for Fortran 77 libraries of /opt/intel/oneapi/mpi/2021.10.0/bin/mpiifort... -L/opt/intel/oneapi/mpi/2021.10.0/libfabric/lib -L/opt/intel/oneapi/mpi/2021.10.0/lib/release -L/opt/intel/oneapi/mpi/2021.10.0/lib -L/opt/intel/oneapi/compiler/2023.2.3/linux/bin/intel64/../../compiler/lib/intel64_lin -L/opt/intel/oneapi/mpi/2021.10.0/libfabric/lib/../lib/ -L/opt/intel/oneapi/mpi/2021.10.0/lib/../lib/ -L/usr/lib/gcc/x86_64-linux-gnu/11/ -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../x86_64-linux-gnu/ -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib64 -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../../lib/ -L/lib/x86_64-linux-gnu/ -L/lib/../lib64 -L/lib/../lib/ -L/usr/lib/x86_64-linux-gnu/ -L/usr/lib/../lib64 -L/usr/lib/../lib/ -L/opt/intel/oneapi/mpi/2021.10.0/libfabric/lib/ -L/opt/intel/oneapi/mpi/2021.10.0/lib/release/ -L/opt/intel/oneapi/mpi/2021.10.0/lib/ -L/usr/lib/gcc/x86_64-linux-gnu/11/../../../ -L/lib64 -L/lib/ -L/usr/lib64 -L/usr/lib -lifport -lifcoremt_pic -limf -lsvml -lm -lipgo -lirc -lpthread -lirc_s -ldl
The configure script that comes with parallel-netcdf is very badly customized. It basically throws away everything from the linker line except -L/path/to/lib -llib - that means, the -Bstatic and -Bdynamic flags are filtered out amongst others
Describe the solution you'd like
My guess is that the easiest solution that also has the least potential to break something will be to patch the configure script to replace -lirc with -lintlc. Ultimately, though, one may wonder why Intel didn't just remove libirc.so or make it a symbolic link to libintlc.so.
Additional context
There are other libraries in the Intel compiler lib directory that have the ending .so and that say either "statically linked" or "not a dynamic executable", see below. libirc.so says "statically linked", the others that say statically linked are __ocl_svml*.so that I have never seen getting used, and therefore I suggest ignoring them.
The other libraries ("not a dynamic executable") all seem to be symbolic links to some .so.VERSION and these are all linked correctly (e.g. libintlc.so -> libintlc.so.5).
Is your feature request related to a problem? Please describe.
Applications built with spack-stack packages esmf, parallelio, parallel-netcdf have
libirc.so
dynamically linked. Applications linked againstlibirc.so
fail to start up with an error like this:The error comes from the fact that
libirc.so
claims to by statically linked, even though it is not, and is missing the symbols fromlibc
. According to Intel,libirc.so
is deprecated and distributed for legacy reasons only; if necessary, one should link tolibintlc.so
instead. However, even the last-ever release ofifort
in oneAPI 2024.2.1 still links againstlibirc
(albeitlibirc.a
):This linking to
libirc
is coming straight fromifort
, but in the above command it should be all static, and indeed it is:Next, try with
-shared
:This also seems ok, since it links
libintlc.so
(which is linked correctly tolibc
), andlibirc_s
only exists as static library:However, this is the output from the parallel-netcdf
./configure
script:The
configure
script that comes withparallel-netcdf
is very badly customized. It basically throws away everything from the linker line except-L/path/to/lib -llib
- that means, the-Bstatic
and-Bdynamic
flags are filtered out amongst othersDescribe the solution you'd like
My guess is that the easiest solution that also has the least potential to break something will be to patch the configure script to replace
-lirc
with-lintlc
. Ultimately, though, one may wonder why Intel didn't just removelibirc.so
or make it a symbolic link tolibintlc.so
.Additional context
There are other libraries in the Intel compiler
lib
directory that have the ending.so
and that say either "statically linked" or "not a dynamic executable", see below.libirc.so
says "statically linked", the others that say statically linked are__ocl_svml*.so
that I have never seen getting used, and therefore I suggest ignoring them.The other libraries ("not a dynamic executable") all seem to be symbolic links to some
.so.VERSION
and these are all linked correctly (e.g.libintlc.so -> libintlc.so.5
).The text was updated successfully, but these errors were encountered: