Intel® oneAPI Math Kernel Library
Ask questions and share information with other developers who use Intel® Math Kernel Library.
7233 Discussions

Linking PARDISO with MKL 10 and Mac OS X

raphhix
Beginner
752 Views
Hi-

I'm having trouble linking the PARDISO libraries with my code. I have done so successfully on other platforms, including Intel ifort/MKL 9 on Linux, so I'm pretty sure it's a linking problem. I managed to link successfully against the dense matrix solvers in the LAPACK libraries, so I think I've got the MKL paths correct. My ifort version is 10.1.006, my MKL version is 10.0.1.014.
The linking line in the Makefile, based on reading the MKL User's guide, is
ifort -g -check all -fpe0 -traceback -align -132 -autodouble -o xnetp data.o full_net.o match.o net.o flux.o eosnom90.o jacobian_PARDISO.o -I/Library/Frameworks/Intel_MKL.framework/Versions/Current/include -L/Library/Frameworks/Intel_MKL.framework/Versions/Current/lib/em64t/ -lmkl_solver_lp64 -lmkl_intel_lp64 -lmkl_intel_thread -lmkl_core -lmkl_intel_thread -lmkl_core -lmkl_intel_thread -lmkl_core -lpthread


The errors are a long series of undefined symbols the beginning of which I'll include below. Any suggestions?

Undefined symbols:
"___kmpc_dispatch_next_4", referenced from:
_ch_blkl_risc_pardiso_ in libmkl_solver_lp64.a(ch_blkl_risc_lp64.o)
_ch_blkldl_risc_pardiso_ in libmkl_solver_lp64.a(ch_blkldl_risc_lp64.o)
_c_blklu_risc_pardiso_ in libmkl_solver_lp64.a(c_blklu_risc_lp64.o)
_c_blkl_risc_pardiso_ in libmkl_solver_lp64.a(c_blkl_risc_lp64.o)
_blklu_risc_pardiso_ in libmkl_solver_lp64.a(blklu_risc_lp64.o)
_blkldl_risc_pardiso_ in libmkl_solver_lp64.a(blkldl_risc_lp64.o)
_c_blkslvs_pardiso_ in libmkl_solver_lp64.a(c_blkslvs_lp64.o)
_c_blklu_unsym_risc_pardiso_ in libmkl_solver_lp64.a(c_blklu_unsym_risc_lp64.o)
_blkl_risc_pardiso_ in libmkl_solver_lp64.a(blkl_risc_lp64.o)
_blklu_unsym_risc_pardiso_ in libmkl_solver_lp64.a(blklu_unsym_risc_lp64.o)
_blklu_unsym_risc_pardiso_ in libmkl_solver_lp64.a(blklu_unsym_risc_lp64.o)
_blklu_unsym_risc_pardiso_ in libmkl_solver_lp64.a(blklu_unsym_risc_lp64.o)
"___kmpc_global_thread_num", referenced from:
_diag_pardiso_ in libmkl_solver_lp64.a(diag_lp64.o)
_c_diag_pardiso_ in libmkl_solver_lp64.a(c_diag_lp64.o)
_pvaxyry_ in libmkl_solver_lp64.a(vmovxy_lp64.o)
_pvsxyry_ in libmkl_solver_lp64.a(vmovxy_lp64.o)
_pvaxyrz_ in libmkl_solver_lp64.a(vmovxy_lp64.o)
_pvrxayx_ in libmkl_solver_lp64.a(vmovxy_lp64.o)
_pvrmxay_ in libmkl_solver_lp64.a(vmovxy_lp64.o)
_pvnorm2_ in libmkl_solver_lp64.a(vmovxy_lp64.o)
_pdscap1_ in libmkl_solver_lp64.a(vmovxy_lp64.o)
_pi4movxy_ in libmkl_solver_lp64.a(vmovxy_lp64.o)
_pimovxy_ in libmkl_solver_lp64.a(vmovxy_lp64.o)
_pvmovxy_ in libmkl_solver_lp64.a(vmovxy_lp64.o)
_pvclrr_ in libmkl_solver_lp64.a(vmovxy_lp64.o)
_pvclri_ in libmkl_solver_lp64.a(vmovxy_lp64.o)
_do_all_pardiso_fc_ in libmkl_solver_lp64.a(do_all_fc_lp64.o)
_gepcmd_pardiso_ in libmkl_solver_lp64.a(gepcmd_lp64.o)
_c_conv32_16_ in libmkl_solver_lp64.a(convert_lp64.o)
_conv16_8_ in libmkl_solver_lp64.a(convert_lp64.o)
_c_sum16_32_ in libmkl_solver_lp64.a(convert_lp64.o)
_sum8_16_ in libmkl_solver_lp64.a(convert_lp64.o)
_c_conv16_32_ in libmkl_solver_lp64.a(convert_lp64.o) < br /> _conv8_16_ in libmkl_solver_lp64.a(convert_lp64.o)
_amuxy_pardiso_ in libmkl_solver_lp64.a(amuxy_lp64.o)
_amuxy_res_pardiso_ in libmkl_solver_lp64.a(amuxy_res_lp64.o)
_reorder2_pardiso_ in libmkl_solver_lp64.a(reorder2_lp64.o)
_c_pre_cgs_pardiso_ in libmkl_solver_lp64.a(c_pre_cgs_lp64.o)
_reorder1_pardiso_ in libmkl_solver_lp64.a(reorder1_lp64.o)
_c_amuxy_res_pardiso_ in libmkl_solver_lp64.a(c_amuxy_res_lp64.o)
_c_amuxy_pardiso_ in libmkl_solver_lp64.a(c_amuxy_lp64.o)
_pre_cgs_pardiso_ in libmkl_solver_lp64.a(pre_cgs_lp64.o)
_ladj_mod_pardiso_ in libmkl_solver_lp64.a(ladj_mod_lp64.o)
_c_cgs_b_ in libmkl_solver_lp64.a(c_cgs_lp64.o)
_c_cgs_a_ in libmkl_solver_lp64.a(c_cgs_lp64.o)
_cnorm2_ in libmkl_solver_lp64.a(c_vmovxy_lp64.o)
_zscap1_ in libmkl_solver_lp64.a(c_vmovxy_lp64.o)
_cclrr_ in libmkl_solver_lp64.a(c_vmovxy_lp64.o)
_cmovxy_ in libmkl_solver_lp64.a(c_vmovxy_lp64.o)
_fnpmod_pardiso_ in libmkl_solver_lp64.a(fnpmod_lp64.o)
_cgs_b_ in libmkl_solver_lp64.a(cgs_lp64.o)
_cgs_a_ in libmkl_solver_lp64.a(cgs_lp64.o)
_sched_pardiso_ in libmkl_solver_lp64.a(sched_lp64.o)
_ch_blkl_risc_pardiso_ in libmkl_solver_lp64.a(ch_blkl_risc_lp64.o)
_ch_blkldl_risc_pardiso_ in libmkl_solver_lp64.a(ch_blkldl_risc_lp64.o)
_c_blklu_risc_pardiso_ in libmkl_solver_lp64.a(c_blklu_risc_lp64.o)
_blkldlslvs_pardiso_ in libmkl_solver_lp64.a(blkldlslvs_lp64.o)
_c_blkl_risc_pardiso_ in libmkl_solver_lp64.a(c_blkl_risc_lp64.o)
_blklu_risc_pardiso_ in libmkl_solver_lp64.a(blklu_risc_lp64.o)
_c_psol_bwscat_pardiso_ in libmkl_solver_lp64.a(c_psol_bwscat_lp64.o)
_psol_bwscat_pardiso_ in libmkl_solver_lp64.a(psol_bwscat_lp64.o)
_c_psol_fwgath_pardiso_ in libmkl_solver_lp64.a(c_psol_fwgath_lp64.o)
_psol_fwgath_pardiso_ in libmkl_solver_lp64.a(psol_fwgath_lp64.o)
_blkldl_risc_pardiso_ in libmkl_solver_lp64.a(blkldl_risc_lp64.o)
_c_blkslvs_pardiso_ in libmkl_solver_lp64.a(c_blkslvs_lp64.o)
_c_blklu_unsym_risc_pardiso_ in libmkl_solver_lp64.a(c_blklu_unsym_risc_lp64.o)
_blkl_risc_pardiso_ in libmkl_solver_lp64.a(blkl_risc_lp64.o)
_ch_blkslvs_ooc_pardiso_ in libmkl_solver_lp64.a(ch_blkslvs_ooc_lp64.o)
_blkslvs_ooc_pardiso_ in libmkl_solver_lp64.a(blkslvs_ooc_lp64.o)
_blklu_unsym_risc_pardiso_ in libmkl_solver_lp64.a(blklu_unsym_risc_lp64.o)
_blkslvs_pardiso_ in libmkl_solver_lp64.a(blkslvs_lp64.o)
_betee_pardiso_ in libmkl_solver_lp64.a(betee_lp64.o)

0 Kudos
2 Replies
Andrey_G_Intel2
Employee
752 Views

You should add libguide.a/libguide.dylib to your linkage line.

Andrey

0 Kudos
raphhix
Beginner
752 Views
Thanks for the quick and accurate answer. That's a might long linking line. Now that I link successfully, I run into an execution problem. With -autodouble on, I get a SEG fault. With -autodouble off, I get "Abort" with no traceback. Because I've used PARDISO on other platforms, both as part of MKL and not, successfully I think I've got the call right. All the declared variables are real(8), so -autodouble is mostly for constants. But I may be munging the data types on this new machine. On a MacBook using the T7400 Core 2 Duo, should I be using the EM64T or IA32? EM64T seems to work for LAPACK, but I'm not sure.
0 Kudos
Reply