如何获取库的安装路径

How to get the path where the library is installed

我在 Linux 工作,我有一个用 Fortran 90 编写的库(由第 3 方编写),它正在从当前工作目录中的文件中读取。我希望能够从其他文件夹调用生成的库,因此我需要读取库的安装路径。我如何知道 Fortran 代码中已编译库的路径?

我需要将代码中的路径存储在变量中。

谁知道python,我想达到和

一样的效果
import os
os.path.dirname(os.path.abspath(__file__))

但在 f90 中(参见 Get location of the .py source file

根据评论中的建议,我做了以下工作:

export DATAPATH=`pwd`
make

在生成文件中

ifort -O3 -fpic -fpp -DDATAPATH -c mysource.f90

mysource.f90

subroutine mysub
  character(len=100)::dpath
#ifdef DATAPATH
  dpath=DATAPATH
#endif
  open(10,file=trim(dpath)//'initialise.dat')
  ....
  ....

问题是在编译时我得到

mysource.f90(42): error #6054: A CHARACTER data type is required in this context.   [1]
    dpath=1
----------^
compilation aborted for mysource.f90 (code 1)

如果您愿意,可以在编译时修复路径。像

gfortran -cpp mylib.f90 -DPREFIX=\"/usr/local/\"

open(newunit=u,file=PREFIX//'mylib/initialise.dat')

你必须确保库确实安装在那个地方PREFIX/mylib/


您可以创建一个包含数据路径的环境变量。这个变量可以手动设置,在你的 .bashrc.bash_profile 或系统 /etc/profile.d//etc/bash.bashrc 中,有很多方法,它们取决于库是否只用于一个用户或某些大型计算机的所有用户。

例如 export MYLIB_PATH='/usr/local/mylib'

然后就可以将Fortran中的变量读取为

CALL get_environment_variable("MYLIB_PATH", mylib_path, status=stat)

路径现在在变量 mylib_path 中。您可以通过检查是否 stat==0 来检查是否成功。


这不是唯一可能的方法。您还可以在您的主目录中为您的库创建一个配置文件:

mkdir $HOME/.config/mylib/
echo "/usr/local/mylib" > $HOME/.config/mylib/path

然后如果没有设置环境变量,你可以尝试从这个文件中读取路径

if (stat/=0) then
  CALL get_environment_variable("HOME", home_dir)
  open(newunit=path_unit, file=home_dir//'/.config/mylib/path',status='old',action='read',iostat=stat)
  if (stat/=0) complain

  read(path_unit,'(a)',iostat=stat)  mylib_path
  if (stat/=0) complain
end if

因此,当您使用 -DDATAPATH 进行编译时,您没有将变量 DATAPATH 传递到您的代码中,只是将一个名为 DATAPATH 的符号声明为 true,因此 ifort 会将 DATAPATH 替换为 1。您需要做的是将其作为值:

-DDATAPATH="$(DATAPATH)"

为了编译工作。