Lac*_*cek 2 c++ python boost fortran intel-mkl
我试图链接一个自然相当复杂的程序:
在运行时期间,我得到以下文本
MKL FATAL ERROR: Cannot load neither libmkl_avx.so nor libmkl_def.so
Run Code Online (Sandbox Code Playgroud)
程序停止后.
我检查了两个libmkl_avx.so并且libmkl_def.so都在$LD_LIBRARY_PATH
最终链接通过以下方式完成:
g++ -g3 -shared -Wl,-soname,libFrrBoost_rt.so interfejs.o t83.o gen_random2.o
-L/opt/intel/composerxe/mkl/lib/intel64 -lpython2.7 -lifport -lifcore -lboost_python
-Wl,--start-group -lmkl_sequential -lmkl_intel_lp64 -lmkl_core -Wl,--end-group
-o libFrrBoost_rt.so
Run Code Online (Sandbox Code Playgroud)
然后,libFrrBoost是链接的模块
运行python t83.py(特别是链接器在准备二进制文件时没有抱怨)导入模块libFrrBoost会导致错误.
试图去谷歌.我发现的所有信息都与用C/Fortran编写的"通常程序"相关联,只包括英特尔的MKL.我能够毫无问题地运行这种程序.我认为Makefile中链接行的MKL部分在两种情况下都是等价的,但必定存在一个隐藏的谜团.问题通常是链接错误 - 我认为不适用(库与英特尔手册完全相同 - 接口,线程和计算库非常标准)
二手编译器:
ifort 12.1.0,icpc 12.1.0,python Python 2.7.1,icc 12.1.0(小C片段也调用MKL,但是)
编辑(由于Hirsto Iliev的评论)
我遇到这样的strace的:strace python t83.py; 结果是(在grepping之后libmkl:
open("/opt/intel/composer_xe_2011_sp1.7.256/mkl/lib/intel64/libmkl_avx.so", O_RDONLY) = 3
open("/usr/bin/libmkl_avx.so", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/opt/slurm-2.2.5/lib/libmkl_avx.so", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/opt/intel/composer_xe_2011_sp1.7.256/compiler/lib/intel64/libmkl_avx.so", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/opt/intel/composer_xe_2011_sp1.7.256/debugger/lib/intel64/libmkl_avx.so", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/opt/intel/composer_xe_2011_sp1.7.256/mkl/lib/intel64/libmkl_avx.so", O_RDONLY) = 3
Run Code Online (Sandbox Code Playgroud)
我知道open的规范就像在这里一样,特别是因为3,4是正数并且表明open已经找到了一个文件并且为它分配了文件discriptors.我已经验证该文件确实存在于该位置.
这也是"好"的英特尔编译器目录:
czeslaw@stefan:~/prog/FoCpy3 $ which ifort
/opt/intel/composer_xe_2011_sp1.7.256/bin/intel64/ifort
Run Code Online (Sandbox Code Playgroud)
所以版本是相同的 - 显然它不是版本问题.
一切都是一样的libmkl_def.so.
免责声明:虽然我对自己所写的内容充满信心,但事实并非如此.每句话都应以"如果我没有记错"开头.
Mis*_*sha 11
对我来说,在intel网站上提出的解决方案效果很好
export LD_PRELOAD=/opt/intel/mkl/lib/intel64/libmkl_core.so:/opt/intel/mkl/lib/intel64/libmkl_sequential.so
Run Code Online (Sandbox Code Playgroud)
这似乎是某种错误.
似乎解决方案是链接-lmkl_rt而不是-lmkl_sequential -lmkl_intel_lp64 -lmkl_core.我不明白为什么人们应该优先于其他人.我感到很困惑但是有效(到目前为止).
编辑 英特尔人声称这是MKL库错误.