2014-01-28 5 views
1

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

Проект построен и установлен без ошибок. Связывание библиотек, таким образом, является успешным. При выполнении в 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?

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

+0

Мое предположение было бы что у KDevelop есть другая среда, у меня нет ее перед собой, поэтому вам нужно просто подталкивать некоторые варианты и видеть, что она что-то переопределяет. Или если вы недавно изменили 'LD_LIBRARY_PATH', что ваш сеанс, где был запущен KDevelop, не отражает этого. –

ответ

1

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

Во многих ОС 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 может потребовать суперпользователя быть понят GUI

+0

Спасибо Danduk82, я добавил папку, в которой 'libmkl_intel_lp64.so' был расположен в соответствии с' ldd' в новом .conf-файле в папке 'etc/ld.so.conf /', запустите 'ldconfig -v' и это сработало для меня. Не знал, что LD_LIBRARY_PATH устарел ... Я не могу проголосовать, потому что у меня пока нет достаточной репутации, извините за это! – user2416984

+0

отлично, может быть, вы могли бы принять ответ, чтобы закрыть тему;) приветствия – Danduk82

0

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

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

    LD_LIBRARY_PATH = /your/shared/library/path 
    
Смежные вопросы