- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
Hello, I'm using Intel MPI 2021.10, and I noticed that the MPI wrappers like mpiicpc always set --enable-new-dtags
if [ "$no_rpath" = "yes" ]; then
rpath_opt="-Xlinker --enable-new-dtags"
else
rpath_opt="-Xlinker --enable-new-dtags -Xlinker -rpath -Xlinker \"${libdir}${MPILIBDIR}\" -Xlinker -rpath -Xlinker \"${libdir}\""
fi
which can have the unintended consequence of using RUNPATH instead of RPATH when linking to other libraries.
What is the reason for doing so? And would there be any side effect if we were to use --disable-new-dtags instead?
Thank you.
-Loris
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I understand that --enable-new-dtags ensures the linker uses RUNPATH instead of RPATH, which allows LD_LIBRARY_PATH to take precedence at runtime.
However, I am in a scenario where I would like to use RPATH to ensure reproducibility in an environment where different versions of the same library may be installed. I found that if I use --disable-new-dtags flag, the MPI wrapper overrides it.
Here is a simple reproducer:
$ mpiicpx -Xlinker --disable-new-dtags -Wall -Wextra -Wl,-rpath,$MKLROOT/lib/intel64 -o matrix_mult_mpi matrix_mult_mpi.cpp -lmkl_intel_ilp64 -lmkl_sequential -lmkl_core -lpthread -lm -ldl
results in an executable with RUNPATH:
$ readelf -d matrix_mult_mpi
Dynamic section at offset 0x53d20 contains 34 entries:
Tag Type Name/Value
0x0000000000000001 (NEEDED) Shared library: [libmkl_intel_ilp64.so.2]
0x0000000000000001 (NEEDED) Shared library: [libmkl_sequential.so.2]
0x0000000000000001 (NEEDED) Shared library: [libmkl_core.so.2]
0x0000000000000001 (NEEDED) Shared library: [libm.so.6]
0x0000000000000001 (NEEDED) Shared library: [libmpicxx.so.12]
0x0000000000000001 (NEEDED) Shared library: [libmpifort.so.12]
0x0000000000000001 (NEEDED) Shared library: [libmpi.so.12]
0x0000000000000001 (NEEDED) Shared library: [libstdc++.so.6]
0x0000000000000001 (NEEDED) Shared library: [libgcc_s.so.1]
0x0000000000000001 (NEEDED) Shared library: [libc.so.6]
0x000000000000001d (RUNPATH) Library runpath: [/software/imkl/2023.2.0/mkl/2023.2.0/lib/intel64:/software/impi/2021.10.0-intel-compilers-2023.2.1/mpi/2021.10.0/lib/release:/software/impi/2021.10.0-intel-compilers-2023.2.1/mpi/2021.10.0/lib]
...
The reason being the way the mpiicpx command expands:
$ mpiicpx -Xlinker --disable-new-dtags -Wall -Wextra -Wl,-rpath,$MKLROOT/lib/intel64 -o matrix_mult_mpi matrix_mult_mpi.cpp -lmkl_intel_ilp64 -lmkl_sequential -lmkl_core -lpthread -lm -ldl -show
icpx -Xlinker '--disable-new-dtags' '-Wall' '-Wextra' '-Wl,-rpath,/software/imkl/2023.2.0/mkl/2023.2.0/lib/intel64' -o 'matrix_mult_mpi' 'matrix_mult_mpi.cpp' '-lmkl_intel_ilp64' '-lmkl_sequential' '-lmkl_core' '-lpthread' '-lm' '-ldl' -I"/software/impi/2021.10.0-intel-compilers-2023.2.1/mpi/2021.10.0/include" -L"/software/impi/2021.10.0-intel-compilers-2023.2.1/mpi/2021.10.0/lib/release" -L"/software/impi/2021.10.0-intel-compilers-2023.2.1/mpi/2021.10.0/lib" -Xlinker --enable-new-dtags -Xlinker -rpath -Xlinker "/software/impi/2021.10.0-intel-compilers-2023.2.1/mpi/2021.10.0/lib/release" -Xlinker -rpath -Xlinker "/software/impi/2021.10.0-intel-compilers-2023.2.1/mpi/2021.10.0/lib" -lmpicxx -lmpifort -lmpi -ldl -lrt -lpthread
because -Xlinker --enable-new-dtags is appended to the original command, along with the flags for MPI libraries.
Is there a way to avoid this behavior and ensure that --enable-new-dtags is not introduced by the wrappers?
Thank you.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
@LorisErcole
the compiler wrappers are for convenience, you can just use the compiler directly and define your own linking and compiling options.
Most users are using LD_LIBRARY_PATH in an environment where multiple versions exists.

- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page