I follow the most simple example in mkl/tools/builder, just make intel64, and the nm mkl_custom.so, I can see symbol dgemm in it. On contrast, if I use make sointel64, I also get mkl_custom.so. However, if I use nm mkl_custom.so, there is no symbol dgemm at all. In the first case, I directly link my dgemm program to mkl_custom.so and everything is fine. I the second case, ld said there is no symbol of dgemm.
I want to ask what is the purpose of sointel64 in Custom Shared Object Builder or how to use it correctly?
I use ubuntu16.04 64bits.
The target `intel64` (which is equal to the target `libintel64`) creates custom-dll using objects from MKL static libraries. In this case everything works as expected. Target `sointel64` uses dynamic MKL libraries for this purpose. This is meaningful on Windows platform (this is the way to limit the number of exported functions) but has no sense on Linux platform. Most likely this option was added on Linux like a unification with Windows, and should be removed to not mislead MKL users.
Thank you for catching this.
Please follow this link to see the Usage of custom shared object builder:
The sointel64 uses the single dynamic library libmkl_rt.so to build a custom shared object for Intel64 architecture. Inside of libmkl_rt.so, other mkl library including mkl_core, mkl_intel_thread ... will be referred. While you use sointel64 generate custom lib, you have to make sure all other referred library are also copied to same path of your_custom.so. So that, your_custom.so could find mkl_core linking with mkl.h. I recommend you to generate custom.so by using libintel64/libia32 so that you could generate static library.