第一种方法(出口LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH):)
基于这种方法,我可以成功地通过"gfortran h5_crtdat.f90 -fintr固有模块-path /usr/local/include -lhdf5_fortran“编译h5_crtdat.f90。我也能办到。
第二种方法(-Wl,-rpath):
基于这一方法,我可以通过"gfortran h5_crtdat.f90 -非本征模块-path /usr/local/include -lhdf5_fortran -Wl,-rpath,/usr/local/lib“成功地编译h5_crtdat.f90。但是,在输入"./a.out“之后,我得到了以下错误./a.out:在加载共享库时出错: libhdf5.so.200:无法打开共享对象文件:没有这样的文件或目录”“。
问题:
我搜索了google,这两种方法在gfortran编译器中链接共享库时可以产生相同的效果。因此,当使用第二种方法时,我不知道为什么会得到错误。
发布于 2022-10-19 14:14:52
这两者有不同的目的。
LD_LIBRARY_PATH
表示在执行已经编译和链接的可执行文件时,应该在何处搜索共享库。这是可能的,但不能保证,某些链接器也会考虑这条路径的实际链接,但还有其他变量,如LIBRARY_PATH
用于这一点。
-Wl,-rpath
表示在构建可执行文件时链接共享库的位置。它在运行可执行文件时没有任何效果。
在运行可执行文件时,必须设置LD_LIBRARY_PATH
或某些等效项,以便能够找到运行所需的库。
https://stackoverflow.com/questions/74120578
复制相似问题