Intel® Fortran Compiler
Build applications that can scale for the future with optimized code designed for Intel® Xeon® and compatible processors.

FCFLAGS vs FLFLAGS.

Hongyizhao
Beginner
2,286 Views

Hi,

On Ubuntu 20.04, I've installed the  parallel_studio_xe_2020.1.102. Now I try to compile the  mstar with ifort. In the makefile shipped with this project, there are the following settings:

FCFLAGS = -L${MKLROOT}/lib/intel64 -lmkl_intel_ilp64 -lmkl_sequential -lmkl_core -lpthread -qopenmp -ldl
FLFLAGS = -i8 -I${MKLROOT}/include -qopenmp

Although I can successfully compile the project with the above settings, but I still not so clear on the differences of the above two variables. Any hints will be highly appreciated.

OTOH, I also try to generate the libraries and compiler options with the interactive mode of mkl_link_tool as shown below:

 

mkl_link_tool -interactive

The results are listed below:

Output
======

Compiler option(s):
 -i8 -I${MKLROOT}/include

Linking line:
 -L${MKLROOT}/lib/intel64 -lmkl_intel_ilp64 -lmkl_sequential -lmkl_core -lpthread -lm -ldl

Environment variable(s):
export LD_LIBRARY_PATH=${MKLROOT}/lib/intel64:$LD_LIBRARY_PATH;

 

Then I try to use the following settings in the makefile but failed to compile:

FCFLAGS = -i8 -I${MKLROOT}/include
FLFLAGS = -L${MKLROOT}/lib/intel64 -lmkl_intel_ilp64 -lmkl_sequential -lmkl_core -lpthread -lm -ldl

 

The errors are shown below:

ld: eigvs.o: in function `eigvs_':
eigvs.f90:(.text+0x2a9): undefined reference to `ssyevd_'
ld: eigvs.f90:(.text+0x7e1): undefined reference to `ssyevd_'
ld: eigvz.o: in function `eigvz_':
eigvz.f90:(.text+0x398): undefined reference to `cheevd_'
ld: eigvz.f90:(.text+0xaea): undefined reference to `cheevd_'
make: *** [makefile:35: mstar] Error 1

Any hints for this problem?

Regards,

HY

0 Kudos
2 Replies
mecej4
Honored Contributor III
2,279 Views

I think that you have FCFLAGS and FLFLAGS interchanged in the first pair that you list, supposedly taken from the makefile. The second letter of the make variable is probably selected to help the user remember: 'C' for "compiler" and 'L' for linker. What you showed later on appears OK, however.

In the source lines containing calls to ssyevd and cheevd, do these names contain underscores already appended? Show the relevant lines of code, please.

 

0 Kudos
Hongyizhao
Beginner
2,247 Views

Thanks a lot for your reply. See the following for more detailed info:

$ egrep -inR 'ssyevd|cheevd' .
./eigvz.f90:48:call CHEEVD(jobz, uplo, n, A, n, EIGV, work, lwork, rwork, lrwork, & !...
./eigvz.f90:66:call CHEEVD(jobz, uplo, n, A, n, EIGV, work, lwork, rwork, lrwork, & !...
./eigvs.f90:45:call ssyevd(jobz, uplo, n, A, n, EIGV, work, lwork, iwork, liwork, info) ! single precision (kind=4)
./eigvs.f90:62:call ssyevd(jobz, uplo, n, A, n, EIGV, work, lwork, iwork, liwork, info) ! single precision (kind=4)
0 Kudos
Reply