KDevelop4: Ошибка при загрузке общих библиотек

Я пытаюсь использовать библиотеки Intel MKL впервые. Я использую CMake для создания простого проекта, в котором используется MKL. Я работаю в среде KDevelop 4.6.

Проект построен и установлен без ошибок. Связывание библиотек, таким образом, успешно. При выполнении в KDevelop я получаю следующую ошибку:

Error while loading shared libraries: libmkl_intel_lp64.so: cannot open shared object file: No such file or directory

Файл CMakeLists выглядит по существу следующим образом:

project(testmkl)

cmake_minimum_required(VERSION 2.6)

enable_language(Fortran)

set(CMAKE_C_FLAGS "-std=c99 -Wall -lpthread") 
set(CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake")

# MKL
find_package(MKL REQUIRED)
include_directories(${MKL_INCLUDE_DIR})

find_package(M REQUIRED)
include_directories(${M_INCLUDES})

add_executable(testmkl ./main.c)
target_link_libraries(testmkl ${M_LIBRARIES} ${MKL_BLAS} ${MKL_LAPACK} ${MKL_INTEL} ${MKL_SEQUENTIAL} ${MKL_CORE})
install(TARGETS testmkl DESTINATION .)

libmkl_intel_lp64.so находится в первой папке LP_LIBRARY_PATH переменная окружения, поэтому я не ожидаю каких-либо ошибок во время выполнения. На самом деле, при запуске программы из командного окна все работает нормально.

Вывод ldd для исполняемого файла:

>> ldd ./testmkl
linux-vdso.so.1 =>  (0x00007fff951fe000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x0000003061a00000)
libm.so.6 => /lib64/libm.so.6 (0x0000003061200000)
libmkl_intel_lp64.so => /opt/intel/composer_xe_2013_sp1.0.080/mkl/lib/intel64/libmkl_intel_lp64.so (0x00007f6f65ef6000)
libmkl_sequential.so => /opt/intel/composer_xe_2013_sp1.0.080/mkl/lib/intel64/libmkl_sequential.so (0x00007f6f65846000)
libmkl_core.so => /opt/intel/composer_xe_2013_sp1.0.080/mkl/lib/intel64/libmkl_core.so (0x00007f6f64317000)
libc.so.6 => /lib64/libc.so.6 (0x0000003060e00000)
    /lib64/ld-linux-x86-64.so.2 (0x0000003060600000)
libdl.so.2 => /lib64/libdl.so.2 (0x0000003061600000)

Связанные библиотеки, таким образом, правильно найдены. Почему программа не работает в среде KDevelop?

Любая помощь приветствуется, спасибо!

2 ответа

Решение

Сначала один короткий вопрос: вы исключаете свою программу из терминала или пытаетесь выполнить ее из графического интерфейса KDE (например, двойным щелчком мыши)?

На многих ОС Linux теперь LD_LIBRARY_PATH устарела. LD находит зависимости благодаря тому, что указано в /etc/ld.so.conf а также /etc/ld.so.conf.d, Возможно, вам придется добавить скрипт где-то там, чтобы включить ваши библиотеки. На самом деле вам просто нужно добавить путь к вашим библиотекам в этих скриптах.

пример из /etc/ld.so.conf/libc.conf:

# libc default configuration
/usr/local/lib

Это может работать для вас.

редактировать: вы также должны запустить ldconfig обновить базу данных LD и / или использовать ldconfig -v, который делает то же самое, но с расширенным выходом

edit2: ldconfig может потребоваться, чтобы права пользователя root были поняты GUI

У меня была такая же проблема, и теперь она решается путем настройки переменной окружения в kdevelop.

  1. Перейти к проекту-> открыть конфигурацию
  2. Выберите марку
  3. Нажмите значок настройки на панели профиля Active environment и добавьте переменную среды:

    LD_LIBRARY_PATH = /your/shared/library/path
    
Другие вопросы по тегам