我第一次尝试使用英特尔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环境中运行?
欢迎任何帮助,谢谢!
答案 0 :(得分:2)
首先提出一个简短的问题:你是从终端中删除你的程序还是试图从KDE gui执行(例如双击)?
在许多Linux操作系统上,现在不推荐使用LD_LIBRARY_PATH。由于/etc/ld.so.conf
和/etc/ld.so.conf.d
中列出的内容,LD会找到依赖项。您可能需要在其中的某处添加脚本以包含您的库。实际上,您只需要在这些脚本中添加库的路径。
来自/etc/ld.so.conf/libc.conf
的示例:
# libc default configuration
/usr/local/lib
这可能对你有用。
编辑:
你也应该运行ldconfig
来更新LD数据库和/或使用ldconfig -v
,它具有相同的功能,但具有扩展输出
edit2:ldconfig
可能要求GUI理解root权限
答案 1 :(得分:0)
我有同样的问题,现在通过在kdevelop中配置环境变量来解决。
单击活动环境配置文件栏中的设置图标,然后添加您的环境变量:
LD_LIBRARY_PATH = /your/shared/library/path