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

时间:2017-09-29 18:08:07

标签: linux shared-libraries valgrind

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

它使用intel mkl,因此依赖于某些特定于mkl的共享库。

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

当我通过gdb运行我的程序时,堆栈跟踪不是很有用。

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

但是,我无法从valgrind运行可执行文件。它会输出以下错误消息。

BaryCentric Interpolation

共享库libmkl_intel_lp64.so存在于同一目录中(以及我的可执行文件所依赖的所有其他共享库)。

如何解决此问题,以便我可以对代码进行修改?

感谢。

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

编辑:使用英特尔编译器2017

在Linux 64位上运行

1 个答案:

答案 0 :(得分:1)

  

共享库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将其库搜索扩展到当前工作目录。

(很高兴它有效)