小编Lac*_*cek的帖子

在Python-C++中链接英特尔MKL - C-Fortran 2003程序

我试图链接一个自然相当复杂的程序:

  • 在Linux Fedora下开发和运行
  • 在fortran 2003中编写的主要代码严重依赖于英特尔的MKL库和小块的ANSI C代码
  • 它有C++接口(使用iso_c_binding)
  • 通过boost.python从python访问c ++接口

在运行时期间,我得到以下文本

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) = …
Run Code Online (Sandbox Code Playgroud)

c++ python boost fortran intel-mkl

2
推荐指数
2
解决办法
4019
查看次数

标签 统计

boost ×1

c++ ×1

fortran ×1

intel-mkl ×1

python ×1