Linux Valgrind:无法加载可执行程序的共享库
我的程序中有一些奇怪的内存相关错误 它使用“英特尔mkl”,因此依赖于某些特定于mkl的共享库 当我运行我的程序时,它会在完成大部分工作后出现故障。segfaults发生在对非空文件指针的函数调用fclose()中 当我通过gdb运行我的程序时,stacktrace不是很有用 因此,我想运行valgrind来查找代码中可能的错误 但是,我无法从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
==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
。