Linux Valgrind:无法加载可执行程序的共享库

Linux Valgrind:无法加载可执行程序的共享库,linux,shared-libraries,valgrind,Linux,Shared Libraries,Valgrind,我的程序中有一些奇怪的内存相关错误 它使用“英特尔mkl”,因此依赖于某些特定于mkl的共享库 当我运行我的程序时,它会在完成大部分工作后出现故障。segfaults发生在对非空文件指针的函数调用fclose()中 当我通过gdb运行我的程序时,stacktrace不是很有用 因此,我想运行valgrind来查找代码中可能的错误 但是,我无法从valgrind运行可执行文件。它将打印以下错误消息 ==52778== Memcheck, a memory error detector ==5277

我的程序中有一些奇怪的内存相关错误

它使用“英特尔mkl”,因此依赖于某些特定于mkl的共享库

当我运行我的程序时,它会在完成大部分工作后出现故障。segfaults发生在对非空文件指针的函数调用fclose()中

当我通过gdb运行我的程序时,stacktrace不是很有用

因此,我想运行valgrind来查找代码中可能的错误

但是,我无法从valgrind运行可执行文件。它将打印以下错误消息

==52778== Memcheck, a memory error detector
==52778== Copyright (C) 2002-2015, and GNU GPL'd, by Julian Seward et al.
==52778== Using Valgrind-3.11.0 and LibVEX; rerun with -h for copyright info
==52778== Command: ./main.exe
==52778==
./main.exe: error while loading shared libraries: libmkl_intel_lp64.so: cannot open shared object file: No such file or directory
共享库libmkl_intel_lp64.so位于同一目录中(以及我的可执行文件所依赖的所有其他共享库)

我如何解决这个问题,以便我可以修改我的代码

谢谢

编辑:我还将环境变量LD_LIBRARY_PATH设置(并选中)到当前目录,但没有帮助

编辑:在Linux 64位上运行,使用英特尔编译器2017

共享库libmkl_intel_lp64.so存在于同一目录中 目录(以及我的可执行文件包含的所有其他共享库) 视情况而定)

我如何解决这个问题,以便我可以修改我的代码

valgrind
为各种功能提供了许多自己的环境和包装,以完成其工作。由于您已经设置了
LD_LIBRARY_PATH
并且在查找库时仍然遇到问题,因此您的另一个选项是使用包含库的链接器选项
-rpath=/PATH/to/dir
在可执行文件内提供库搜索路径。向编译字符串添加的内容如下:

-Wl,-rpath=/path/to/dir   /* that has libmkl_intel_lp64.so in it */
然后查找库不依赖于外部环境,也不希望
valgind
将其库搜索扩展到当前工作目录


(很高兴它成功了)

您在哪个平台上运行
/main.exe
表示您正在windows上从powershell中运行(除非您出于某种奇怪的原因刚刚将
-o main.exe
添加到Linux上的
gcc
编译字符串中)。如果你在windows上,你在使用MinGW,MinGW TDM,什么?设置
LD_LIBRARY_PATH
时,您是否使用windows或POSIX路径表示法(例如
c:/PATH/to/your/lib
)?在Linux上运行。使用英特尔编译器。这很有帮助,
.exe
真的让我措手不及。重新编译
main.exe
添加
-Wl,-rpath=/path/to/dir
,该文件具有
libmkl\u intel\u lp64。因此
并重试。它成功了。:)rpath选项实现了这一点。谢谢。很遗憾,它的2017年和Linux路径仍然很混乱。他们最新尝试修复路径的小工具增加了一些DT位。现在您必须使用
-Wl,--启用新的dtags