我的程序中有一些与奇怪的内存相关的错误。
它使用intel mkl,因此依赖于某些特定于mkl的共享库。
当我运行我的程序时,它在完成大部分工作后会出现段错误。 segfaults在函数调用fclose()中发生到非空的文件指针。
当我通过gdb运行我的程序时,堆栈跟踪不是很有用。
因此我想运行valgrind来查找代码中的可能错误。
但是,我无法从valgrind运行可执行文件。它会输出以下错误消息。
BaryCentric Interpolation
共享库libmkl_intel_lp64.so存在于同一目录中(以及我的可执行文件所依赖的所有其他共享库)。
如何解决此问题,以便我可以对代码进行修改?
感谢。
编辑:我还将环境变量LD_LIBRARY_PATH设置(并检查)到当前目录,但没有帮助。
编辑:使用英特尔编译器2017
在Linux 64位上运行答案 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
将其库搜索扩展到当前工作目录。
(很高兴它有效)