Я пытаюсь связать программу, которая довольно сложна:
Во время выполнения я получаю следующий текст
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 от Intel. Я могу запускать такого рода программы без проблем. Я думаю, что MKL-часть связующей строки в Makefile эквивалентна в обоих случаях, но где-то должна быть скрытая тайна. Обычно проблема заключалась в плохом соединении, которое я не вижу применимым (библиотеки точно такие же, как в руководстве Intel — интерфейс, потоки и вычислительные библиотеки довольно стандартны)
Использованные компиляторы:
ifort 12.1.0, icpc 12.1.0, python Python 2.7.1, icc 12.1.0 (небольшой фрагмент кода C также вызывает MKL, но)
РЕДАКТИРОВАТЬ (из-за комментария Хирсто Илиева)
Я запустил 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
Я понимаю, что спецификация для open как Вот в частности, 3,4 положительны и указывают, что open нашел файл и присвоил ему файловые дескрипторы. Я проверил, что файл существует в этом месте.
также это «хороший» каталог компилятора Intel, как:
czeslaw@stefan:~/prog/FoCpy3 $ which ifort
/opt/intel/composer_xe_2011_sp1.7.256/bin/intel64/ifort
Таким образом, версия та же самая — очевидно, это не проблема версии.
Все то же самое для libmkl_def.so
,
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИХотя я могу быть уверен в том, что я пишу, я не уверен. Каждое предложение должно начинаться с «Если я не ошибаюсь».
Для меня решение, предложенное на сайт Intel работает хорошо
export LD_PRELOAD=/opt/intel/mkl/lib/intel64/libmkl_core.so:/opt/intel/mkl/lib/intel64/libmkl_sequential.so
Кажется, это какая-то ошибка.
Кажется, решение состоит в том, чтобы связать с -lmkl_rt
вместо -lmkl_sequential -lmkl_intel_lp64 -lmkl_core
, Я не понимаю, почему один должен давать преимущество перед другими. Я в замешательстве, но это работает (пока).
редактировать
Люди Intel утверждают, что это была ошибка библиотеки MKL.