I'm using Intel MKL 10.2.5.035 in the UNIX-based system I'm working on. There's a requirement to use dynamic libraries and each dependency (MKL library necessary to run the C code in that case) is registered within the system and copied to the system specific location during compilation/liniking (another specific tool is used here). All registered libraries are automatically loaded during the sytem initialization and available. There's no control over LD_LIBRARY_PATH or other means of pointing the system to the right path except the mentioned registration. Quite a specific setup, but that's how it looks like.
The problem is that during execution of some (all?) of the Intel MKL routines (I tried dgemm() and one of the solvers) there's a call to mkl_serv_load_dll() which eventually calls dlopen() on libmkl_p4m3.so. In that case it looks in the path specific to libmkl_core.so (as I wrote, each library is copied into different folder), which - I think - is the place it thinks all other libraries should be placed. It fails and the execution of the code is stopped. So my question is, given that all libraries are preloaded and available, is there any way to avoid direct call to dlopen, e.g. by setting an environment variable. I believe I can hack the system somehow to point the code being executed to the right place, but I'd like to avoid that as long as there's a chance to find an elegant solution.