如何构建运行Fortran代码的可移植R程序?

如何构建运行Fortran代码的可移植R程序?,r,gcc,fortran,shared-libraries,gfortran,R,Gcc,Fortran,Shared Libraries,Gfortran,我们有一个希望在GUI中使用的Fortran经济模型,因此我构建了一个R程序,该程序使用dyn.load()导入Fortran代码,并使用.Fortran()启动该模型 为了将Fortran代码导入R,我使用以下行将.f90文件编译成.o文件: gfortran-c file1.f90 file2.f90 然后,我跑了这一行: gfortran-sharedfile1.o file2.o-o out.so 从R中,我用dyn.load('out.so')加载文件,我可以使用我在R中用.Fortr

我们有一个希望在GUI中使用的Fortran经济模型,因此我构建了一个R程序,该程序使用
dyn.load()
导入Fortran代码,并使用
.Fortran()
启动该模型

为了将Fortran代码导入R,我使用以下行将.f90文件编译成.o文件:

gfortran-c file1.f90 file2.f90

然后,我跑了这一行:

gfortran-sharedfile1.o file2.o-o out.so

从R中,我用
dyn.load('out.so')
加载文件,我可以使用我在R中用
.Fortran()
调用编写的子程序

现在,在我的计算机上一切正常,但如果我将这个.so文件和我的R代码发送给其他人(这是最初的目标),其他人会收到以下错误:

unable to load shared object '/path/to/.so':
  dlopen(/path/to/.so, 6): Library not loaded: /usr/local/opt/gcc/lib/gcc/7/libgfortran.4.dylib
我在网上搜索过,据我所知,没有包含在.so文件中的链接库存在问题。我是否可以将它们都包含在一个独立的包中,并将生成的.so文件发送给某个人,以便他/她可以运行R代码而无需重新编译所有内容


谢谢

你可能想用C++来包装FORTRAN,并使用<代码> Rcpp <代码>包。这可能与您的
相关。因此
文件所需的Fortran库必须可供您的“其他人”使用。这样用户就可以安装您使用的Fortran编译器。您还可以尝试将
.so
链接到
libgfortran.4.dylib
的本地副本。如何做到这一点取决于用户使用的操作系统和编译器。您似乎使用Mac OS或Mac OS X。用户将不得不安装与您相同的编译器。您可能希望查看C++中的FORTRAN封装,并使用<代码> Rcpp < /Cor>包。这可能与您的
相关。因此
文件所需的Fortran库必须可供您的“其他人”使用。这样用户就可以安装您使用的Fortran编译器。您还可以尝试将
.so
链接到
libgfortran.4.dylib
的本地副本。如何做到这一点取决于用户使用的操作系统和编译器。您似乎正在使用macOS或MacOSX。用户必须安装与您相同的编译器。