Of course, USE statement is required to call MKL blas95 and lapack95 subroutines.
As you can find in the Intel Fortran documentation,
You need an interface block for a subroutine when:
- Calling arguments use argument keywords.
- Some arguments are optional.
- A dummy argument is an assumed-shape array, a pointer, or a target.
- The subroutine extends intrinsic assignment.
- The subroutine can be referenced by a generic name.
- The subroutine is in a dynamic-link library.
So, if you compile your program without USE statement, usual Fortran 77 interface is assumed.
You can find the correspondent MKL examples, for instance:
Note, you can build .mod files and Fortran 95 libraries first.
To do this just run blas95 examples as described in the MKL user guide.
See examples execution command line also for the proper linking options.
You forgot to add mkl_blas95 library (_dcopy_mkl95_ Undefined symbols) and source/common_func.f file (_printvectord_ Undefined symbols). So, try the next command line:
ifort dcopyx.f90 common_func.f -I$MKLINCLUDE -L$MKLPATH -lmkl_blas95 -lmkl_intel -lmkl_intel_thread -lmkl_core -lguide lpthread
You can find libmkl_blas95.a library in the same directory as .mod files after examples run. Copy it into $MKLPATH directory, where other MKL libraries are located.