我的程序中有一些奇怪的内存相关的错误。
它使用英特尔mkl,因此依赖于一些特定于mkl的共享库。
当我运行我的程序时,在完成了大部分工作之后,它会发生段错误。 段错误发生在函数调用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存在于相同的目录(以及我的可执行文件依赖的所有其他共享库)中。
我如何解决这个问题,以便我可以valgrind我的代码?
谢谢。
编辑:我也设置(和检查)环境variablesLD_LIBRARY_PATH到当前目录,但它没有帮助。
编辑:在Linux 64位上运行,使用英特尔编译器2017
共享库libmkl_intel_lp64.so存在于相同的目录(以及我的可执行文件依赖的所有其他共享库)中。
我如何解决这个问题,以便我可以valgrind我的代码?
valgrind
提供了许多自己的环境和各种功能的包装,以完成其工作。 由于您已经设置了LD_LIBRARY_PATH
并且在查找库时仍然遇到问题,所以您的其他选择是使用包含该库的链接器选项-rpath=/path/to/dir
在可执行文件本身内提供库搜索路径。 对编译字符串的补充是:
-Wl,-rpath=/path/to/dir /* that has libmkl_intel_lp64.so in it */
然后找到这个库不依赖于外部环境,或者希望valgind
将库扩展到当前的工作目录。
(很高兴它的工作)