如何获取安装库的路径

时间:2016-10-24 13:25:52

标签: path fortran shared-libraries

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

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

谁知道python,我希望实现与

相同
import os
os.path.dirname(os.path.abspath(__file__))

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

使用评论中的建议我已完成以下操作:

export DATAPATH=`pwd`
make
Makefile中的

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)

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

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

-DDATAPATH="$(DATAPATH)"

使编译工作。