R会不会调用gfortran编译对象?

时间:2012-08-16 06:25:06

标签: r fortran

我做了一个简单的fortran例程

subroutine add(x,y)
    real(8) :: x,y

    y = x + 3
end subroutine

保存为test.f90。

我用

编译
gfortran -shared test.f90 -o test.so

在R(在同一目录中),我使用

dyn.load('test.so')

但它给了我这个错误:

Error in dyn.load("test.so") : 
  unable to load shared object '/Users/Steven/Documents/PhD/npsR/test.so':
  dlopen(/Users/Steven/Documents/PhD/npsR/test.so, 6): Symbol not found: ___addtf3
  Referenced from: /usr/local/gfortran/lib/libquadmath.0.dylib
  Expected in: /Library/Frameworks/R.framework/Resources/lib/libgcc_s.1.dylib
 in /usr/local/gfortran/lib/libquadmath.0.dylib

有谁知道为什么?我正在使用mac osx Lion,R v2.15.0和gfortran 4.6.2。

谢谢!

2 个答案:

答案 0 :(得分:3)

除非你真的了解自己在做什么,否则你应该使用R tools附带的gfortran。 libgcc中缺少的符号并不令人惊讶,因为您尝试在4.2运行时环境中运行使用4.6 gfortran编译的代码。

答案 1 :(得分:2)

您只能使用用于构建R的gfortran版本。 由于您在Lion上并且可能安装了Xcode,因此您可以从此处获取相应版本的gfortran:http://r.research.att.com/tools/ 转到“Apple Xcode gcc-42附加组件”部分并选择合适的版本。

如果可能的话,你必须彻底摆脱你的gfortran 4.6.2或通过改变PATH使它无法进入(我怀疑除非它在/ opt /...).

并且使用R CMD SHLIB,因为这会将正确的选项传递给编译器和链接器。