我試圖連接一個程序,它本質上是相當複雜的:的Python-C++中的鏈接英特爾MKL - C-Fortran 2003的程序
- 開發和Linux下Fedora的運行 Fortran語言編寫的2003
- 主代碼是在很大程度上依賴於Intel的MKL庫和小件的ANSI C代碼
- 它已丙
- 的C++接口是從蟒經由Boost.Python的訪問++接口(使用ISO_C_BINDING)
在運行時,我得到了下面的文本程序停止
MKL FATAL ERROR: Cannot load neither libmkl_avx.so nor libmkl_def.so
之後。
我已檢查這兩個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
libFrrBoost是運行python t83.py
被鏈接的模塊,然後
(以當準備二進制文件時,特定的鏈接器不會發出抱怨)導入模塊libFrrBoost會導致錯誤。
嘗試谷歌。我發現的所有信息均與C/Fortran編寫的「常用程序」相關,並且僅包含英特爾的MKL。我能夠毫無問題地運行這類程序。我認爲Makefile中鏈接行的MKL部分在兩種情況下都是等價的,但是必須存在隱藏的奧祕。這個問題通常是壞的鏈接 - 我沒有看到適用(庫是完全按照Intel的手冊 - 接口,線程和計算庫是非常標準)
使用編譯器:
ifort 12.1.0,ICPC 12.1.0,蟒蛇的Python 2.7.1,
我已經運行了strace的ICC 12.1.0(在小C段還呼籲MKL,但)
EDIT(由於Hirsto伊利耶夫的評論)通過這種方式: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
我明白,開放規格是在here的,尤其是3,4是積極的,表明開放已經找到了文件,並賦予其文件discriptors我已經驗證文件確實在那個地方存在
也這是「好」英特爾編譯器的目錄:
[email protected]:~/prog/FoCpy3 $ which ifort
/opt/intel/composer_xe_2011_sp1.7.256/bin/intel64/ifort
所以版本是相同的 - aparently它不是一個版本的問題。
libmkl_def.so
的一切都是一樣的。
免責聲明:雖然我可能聽起來對自己寫的內容充滿信心,但我不是。每個句子都應該以「如果我沒有弄錯」開頭。
用'strace -f -e trace = file -o trace.out ./program args ...'跟蹤你的程序,然後在'trace.out'中grep for libmkl_def'來查看dlopen )'實際上是在尋找它。 –
親切!我不知道這個命令。但結果不盡人意。我將編輯主文章並在那裏回答,因爲我需要更多空間和更多格式選項而不是評論。 – Lacek
請採取一些專業意見 - http://software.intel.com/sites/products/mkl/ - 已經幫助我多出一次 –