Как изменить путь, чтобы исправить ошибку "./main: ошибка при загрузке разделяемой библиотеки libmkl_core.so? - PullRequest
1 голос
/ 20 сентября 2019

Я установил библиотеку intel mkl.содержимое имеет путь / home / user / intel / ......Я должен запустить код C ++, используя make-файл, в котором он упоминается.

CC = /home/user/intel/bin/icpc -g
INCLUDE = -I/home/user/intel/mkl/include 
LIB = -L/home/user/intel/mkl/lib/intel64 -lmkl_core -lmkl_intel_lp64 -lmkl_intel_thread -liomp5 -lpthread -std=c++11

Я успешно установил parallel_studio_xe_2019_update5_cluster_edition.но все равно я получаю сообщение об ошибке ./main: ошибка при загрузке общих библиотек.Как я могу исправить эту ошибку.Какие изменения мне нужно сделать?

1 Ответ

3 голосов
/ 20 сентября 2019

Связывание с разделяемыми библиотеками фактически выполняется в два этапа: при сборке (где компоновщик должен найти библиотеку);И при запуске (когда динамически загружаемая операционная система должна найти библиотеку).

При сборке с библиотеками, установленными в нестандартных местах, вы указываете компоновщику, где найти библиотеку, используя параметр -L.К сожалению, он не сообщает динамическому загрузчику, где находится библиотека.

Чтобы сообщить динамическому загрузчику местоположение динамической библиотеки, есть два способа, один из которых я рекомендую - добавить флаг при сборке.таким образом, компоновщик вставит местоположение в исполняемый файл программы для динамического загрузчика, чтобы увидеть.Это делается с помощью опции -Wl,-rpath,/path/to/lib/directory.

. В вашем случае вам необходимо добавить опцию -Wl,-rpath,/home/user/intel/mkl/lib/intel64 в переменную makefile LIB.


Чтобы уточнить, полная строка должна быть

LIB = -L/home/user/intel/mkl/lib/intel64 -Wl,-rpath,/home/user/intel/mkl/lib/intel64 -lmkl_core -lmkl_intel_lp64 -lmkl_intel_thread -liomp5 -lpthread -std=c++11 

То есть вам нужно оба старая опция -L (как у вас есть в коде, который вы показываете) и добавьте новую опцию.

...